我看到这su -
使得 shell 成为登录 shell su --help
。我很好奇这和普通命令之间有什么区别su
。
我知道路径上似乎存在差异,还有其他差异吗,或者这几乎是唯一的差异?
答案1
我通常遇到的差异是环境变量的差异。 su - 更改环境, su 不更改。例如:“su -”可以提供不同的 PATH,访问其他工具,可以使用不同的配置提供其他 HOME(~/.ssh !/.Xauthority 等)
答案2
据我所知,它su -
模拟了一次全新登录,因此会触发与登录相关的所有操作,同时su
只是将用户切换到 root 权限。
答案3
如果 ~/.profile 存在,则登录 shell 会获取它的源。因此,这实际上取决于您的 ~/.profile 中有什么?
通常这些是环境变量差异,例如 PATH 或提示(PS1 环境变量),但显然还存在其他差异......这实际上取决于您在 shell 配置脚本中输入的内容。
答案4
从man su
-, -l, --login
make the shell a login shell
所以下一个问题是,什么是登录 shell,以及它与非登录 shell 有何不同。
在man bash
下面INVOCATION
您可以读到一个长而迂腐的部分,它可以归结为这样的内容:登录 shell 运行文件profile
(例如/etc/profile
和~/.bash_profile
),而交互式非登录 shell 运行bashrc
文件。