在开始会话之前在函数中自定义linux终端PS1变量

时间:2016-06-23 18:59:06

标签: linux bash session terminal ps1

我经常从终端的不同标签开始到服务器的终端会话。我想创建一个函数,在启动会话之前,它会更改选项卡的标题,以便我可以轻松识别哪个选项卡打开了哪个会话。

让我们假装我的会话是一个ssh会话。当我输入终端

fn myserver

其中fn是〜/ .bashrc中定义的函数:

function fn() {
  set-title "$1"
  ssh $1         
}
function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$*\a\]"
  PS1=${ORIG}${TITLE}
}

终端启动会话,并且仅在ssh会话结束后更改选项卡的标题。我猜这是因为会话在fn函数中打开,并且只有当函数返回时才实现PS1。如何在会话开始之前更改标题/更新PS1变量?

2 个答案:

答案 0 :(得分:1)

你是对的;在class A { public: A(char t_name) { name = t_name; } ~A() { } char name; }; class B { public: A* attribute; B() { attribute = new A('1'); } ~B() {} }; int main() { B* b_variable = new B; B* b_copy = new B(*b_variable); return 0; } 退出<ul class="list"> <?php foreach ($r['result']['professions']['primary'][0]['recipes'] as $item) : ?> <li> <?= $item ?> </li> <?php endforeach ?> </ul> 之后,您向TITLE添加PS1后,您的本地主持人不会显示其他提示。相反,只需立即输出ssh

TITLE

请注意,在运行function fn() { set-title "$1" ssh $1 } function set-title() { printf '\e]2;%s\a' "$1" } 之前在本地设置PS1无论如何都不会影响您对远程主机的提示。

答案 1 :(得分:1)

使用此answer的详细信息,我想出了这个:

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$*\a\]"
  PS1=${ORIG}${TITLE}
}

function fn() {
  set-title $1
  ssh -t $1 "bash --init-file <(echo \"export PS1=\\\"$ORIG$TITLE\\\"\")"
}

您可能必须在导出.bashrc之前获取PS1文件,因为--init-file使bash忽略初始化文件。 (出于某种原因我不需要......)。然后,您应该将echo \"export PS1=\\\"$ORIG$TITLE\\\"\"替换为echo \"cd $HOME; . .bashrc; export PS1=\\\"$ORIG$TITLE\\\"\"