Linux ubuntu etc/profile 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux ubuntu etc/profile 的问题相关的知识,希望对你有一定的参考价值。

我的profile内容如下:
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi

if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi

umask 022

LD_LIBRARY_PATH=./
export LD_LIBRARY_PATH
我想将当前目录当作 so文件的目录。请问错在哪?每次我打开Shell都需要 source /etc/profile 或者. /etc/profile 才能生效如何让它自动生效?

首先你要确认profile这个文件时再哪个目录执行的,./这个目录是一直变化的,如果你在/root下面执行profile, 你的.so目录就会是/root,如果你在/etc下面执行,那么就会变成/root.系统开机的时候应该是在特定的目录下执行了profile去配置文件
要解决该问题,你要么用绝对路径,要么就自己写一个脚本放到对应的目录,然后在该目录下执行该脚本。
参考技术A 看你用的是bash,可能ubuntu里的bash不会自动source /etc/profile,所以你将那条export命令放在~/.bashrc里试试。另外,LD_LIBRARY_PATH=./ 是不合适的,这里应该用绝对路径。追问

我是程序员,我就是希望我的可执行文件与So等库文件放在一起时SHELL可以自动找到并加载 。我也希望我的当前目录是变化 的,所以我使用相对路径。请问相对路径难道不行吗?

追答

你自己的so文件总得放在某个或者某几个固定的path里吧,也就是说不会经常变动,那么你就直接指定绝对路径好了。

bash启动的时候source /etc/profile,这个进程有自己的“默认工作目录”(每个进程都有自己的默认工作目录),但我觉得此时这个工作目录应该不是你的"~"(home path),所以你写的那条export用相对路径不会生效。而当你手动source /etc/profile的时候你是处在合理的工作目录中的(你手动cd就能去合适的目录),所以可以生效。

如果你的so目录有很多个,那么只好在.bashrc里指定多个目录给LD_LIBRARY_PATH变量了(这样也有可能造成混乱,特别是命名重复时)。建议可以临时在shell里用export设置一下,随用随开。

本回答被提问者采纳
参考技术B rm掉,系统会自动重新生成。
或者你可以看看同目录底下有没有profile.bak,profile.backup,profile.******
如果有,直接重命名覆盖源文件。

以上是关于Linux ubuntu etc/profile 的问题的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu18.04 /etc/resolv.conf 文件问题

Ubuntu中怎么找不到/etc/sysconfig/network?

linux中/etc/rc.d/rc.local是啥文件

Ubuntu 解决 /etc/rc.local 开机启动问题

Linux Ubuntu 20.04 —添加开机启动(服务/脚本)

linux(ubuntu)系统中 修改了 /etc/profile 文件后sorce执行后能立即生效,但是当我打开一个新的terminal