![~/.bashrc 脚本在 ssh 登录时无法正确运行,但与源 ~/.bashrc 一起工作正常](https://linux22.com/image/73141/~%2F.bashrc%20%E8%84%9A%E6%9C%AC%E5%9C%A8%20ssh%20%E7%99%BB%E5%BD%95%E6%97%B6%E6%97%A0%E6%B3%95%E6%AD%A3%E7%A1%AE%E8%BF%90%E8%A1%8C%EF%BC%8C%E4%BD%86%E4%B8%8E%E6%BA%90%20~%2F.bashrc%20%E4%B8%80%E8%B5%B7%E5%B7%A5%E4%BD%9C%E6%AD%A3%E5%B8%B8.png)
为了跟踪我在不同选项卡中打开的 ssh 连接,我使用以下 ~/.bashrc 脚本:
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$@\a\]"
PS1=${ORIG}${TITLE}
}
set-title <SERVERNAME>;
echo "set-title <SERVERNAME>"
我为我的选项卡执行此操作,我没有打开 ssh (使用set-title LOCAL;
)并且在两个不同的服务器上。在一台服务器上,它完全按照我想要的方式执行并更改选项卡名称,但在另一台服务器上,它没有更改。
set-title <SERVERNAME>;
当我自己在命令行上输入时,它会更改选项卡名称,并且在登录时会 echo "set-title <SERVERNAME>"
。另外,如果我source ~/.bashrc
这样做,它会按预期工作,所以只有当登录到服务器时它才不起作用。
在登录运行的服务器上运行Scientific Linux release 6.7 (Carbon)
,在不运行的服务器上运行CentOS release 6.6 (Final)
。什么可能导致set-title <SERVERNAME>;
.bashrc 脚本在登录时无法正确运行?
答案1
如果没有进一步的信息,就无法回答这个问题。
然而,我想最有可能的情况是,它是.bashrc
由登录时来源的.bash_profile
或.profile
– 可能与此类似:
# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
source "${HOME}/.bashrc"
fi
我猜想在未设置标题的系统上,变量PS
会在登录脚本的稍后阶段被设置为另一个值。
该变量实际上应该在 Bash 配置文件(或)PS1
中设置,该配置文件仅在登录时运行,并且该变量应作为环境变量进行编辑,以便任何子 shell 继承其值。.bash_profile
.profile
exported
PS1=${ORIG}${TITLE}
export PS1
或者使用适用于 Bash shell 的简写:
export PS1=${ORIG}${TITLE}