我的 ubuntu 上有一个可执行脚本,位于~/project/
目录中,我尝试将该路径添加到/etc/environment
。因此,我编辑了此路径PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/"
。然后,我注销并重新登录,以身份打开终端su
并运行命令以在该文件夹上执行我的脚本,但结果是command not found
。
然后,我将路径更改为/etc/environment
, 然后它就可以工作了。现在我可以在命令下毫无失败地PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/r0xx4nne/project/"
运行里面的可执行脚本。~/project/
su
我的问题是,〜/项目和/主页/r0xx4nne/项目当创建路径时/etc/环境?
为什么会这样?我是新手,我只是想了解更多。谢谢您的回复。
答案1
在 shell 中,在大多数情况下~/project/
会扩展为/home/yourusername/project
。这称为波浪号扩展。
如果你把
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:~/project/
(注意,没有引号)在 中~/.profile
。您的 PATH 将被正确设置,因为~/.profile
在您登录时由 shell 解释。/etc/environment
(并且它是用户特定的~/.pam_environment
)不由 shell 解释。它由pam_env模块,但它只接受对,并且不会对进行任何NAME=VALUE
扩展(如$var
或~/
或等) 。$(command)
VALUE
答案2
当您以 su 登录时,~
是/root
,不是/home/<yourusername>
。否则,两者相同。
注意:在实际执行命令之前,shell 会扩展波浪号(而不是ls
)。例如,如果您运行sudo ls ~
,则将执行的命令是ls /home/<yourusername>
而不是ls /root
。要阻止 shell 以非 root 用户身份扩展波浪号,您可以:
- 首先以 root 身份登录,然后在root shell中执行命令或者
将命令作为参数传递给 shell,并让 shell 以 root 身份运行:
sudo bash -c "ls ~"
答案3
波浪号代表当前用户的主目录。根据使用情况,它可能是您的主目录,也可能是其他目录。如果您尚未登录,则无法使用。
一个相关的问题是 /etc 不是你的目录,也不是添加你个人路径的地方。如果有其他用户,他怎么会有你的主目录的路径呢?
修改路径的正确位置取决于谁需要该路径:
仅限一个用户(您) -- $HOME/.profile
,其中 $HOME 是 /home/username
除 root 之外的所有用户 --/etc/profile
根 - /root/.profile
因此,总而言之,您的路径应该设置在/home/r0xx4nne/.profile
。