在 /etc/environment 中创建路径时 ~/folder 和 /home/username/folder 之间的区别

在 /etc/environment 中创建路径时 ~/folder 和 /home/username/folder 之间的区别

我的 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

相关内容