Bash:从用户切换到根导致提示出现问题

Bash:从用户切换到根导致提示出现问题

我在 Mac 上运行 Snow Leopard(如果重要的话)。我正在自定义我的 bash 提示符以显示从用户特定位置提取的内容。例如,我正在使用Ruby 版本管理器管理不同版本的 Ruby。我在提示符中显示我正在使用的 Ruby 版本。我还使用自制,并通过 Homebrew 安装了 Git。我也在提示符中显示了 Git 分支。

问题是,当我切换到 root(sudo su 或 sudo bash)时,它会尝试使用我的用户的提示符,但由于找不到 RVM 或 Homebrew,因此无法使用该提示符。因此它会显示错误。我该如何修复它,让它不显示错误?(要么通过像我仍然是该用户一样带上 RVM/Homebrew,要么不显示我的自定义提示符)

答案1

选项1

使用sudo su -而不是仅仅sudo su

额外的破折号是模拟完整登录的同义词-l。这意味着它将从 root 用户的主目录中读取配置文件(.bashrc、.profile 等)。

选项 2

如果你坚持使用自己的 .bashrc,请在尝试将 RVM 放入路径之前,进行测试以检查路径中是否存在 RVM。如下所示:

type rvm > /dev/null
RVM_EXISTS=$?  # get exit status, 0 if it exists
if [ $RVM_EXISTS ] 
then
    PS1=(your rvm code here)
else
    PS1=(your prompt w/o rvm here)
fi

(未经测试)

选项 3

按照选项 2 测试 rvm 是否存在,但如果不存在则创建一个虚拟 rvm bash 函数并且不进行更改PS1

type rvm > /dev/null
RVM_EXISTS=$?  # get exit status, 0 if it exists
if [ ! $RVM_EXISTS ] 
then
   rvm () { echo > /dev/null }
fi

答案2

您需要通过操作系统变量 $PS1 来更改提示

如果您只想显示主机名后跟美元符号,可以执行以下操作: export PS1='h:\W\$'

要保留下一个 Bash shell 的设置,请在 $HOME/.bashrc 中放置一行如下内容: PS1='\h:\W\$'

Mac 用户请注意以下事项由于 OS X 和终端应用程序处理命令模拟的方式,您必须创建文件 $HOME/.bash_profile 并输入以下行:source ~/.bashrc

来源

答案3

您可以在根目录的主目录中进行设置,以便它使用不同的.bashrc,或相同的.bashrc(只需 mv 它)

答案4

不让我投票,但 Doug Harris 有正确的答案:“使用 sudo su - 而不仅仅是 sudo su”

这是迄今为止最简单的方法。当对任何用户执行 sudo 以假定他们的登录环境时,这种方法都有效。我个人不会乱用 root 的登录环境,而是使用“sudo su -”。

相关内容