我经常从终端的不同标签开始到服务器的终端会话。我想创建一个函数,在启动会话之前,它会更改选项卡的标题,以便我可以轻松识别哪个选项卡打开了哪个会话。
让我们假装我的会话是一个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变量?
答案 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\\\"\"