~/.bashrc 脚本在 ssh 登录时无法正确运行,但与源 ~/.bashrc 一起工作正常

~/.bashrc 脚本在 ssh 登录时无法正确运行,但与源 ~/.bashrc 一起工作正常

为了跟踪我在不同选项卡中打开的 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.profileexported

PS1=${ORIG}${TITLE}
export PS1

或者使用适用于 Bash shell 的简写:

export PS1=${ORIG}${TITLE}

相关内容