在启动 session 之前在函数中自定义 linux 终端 PS1 变量
Customize linux terminal PS1 variable in a function before starting a session
我经常从终端的不同选项卡启动一个终端 session 到服务器。我想创建一个函数,在启动 session 之前更改选项卡的标题,以便我可以轻松识别哪个选项卡打开了哪个 session。
让我们假设我的 session 是一个 ssh session。当我输入终端
fn myserver
其中 fn 是在 ~/.bashrc 中定义的函数:
function fn() {
set-title ""
ssh
}
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*\a\]"
PS1=${ORIG}${TITLE}
}
终端启动 session 并且选项卡的标题仅在 ssh session 结束后更改。我猜这是因为 session 在 fn 函数中打开,并且只有当函数 returns 被 PS1 实现时。如何在 session 开始之前更改 title/update 和 PS1 变量?
你是对的;将 TITLE
添加到 PS1
后,您的本地主机不会显示另一个提示,直到 ssh
退出。相反,立即输出 TITLE
。
function fn() {
set-title ""
ssh
}
function set-title() {
printf '\e]2;%s\a' ""
}
请注意,在 运行 ssh
之前在本地设置 PS1
无论如何都不会影响您在远程主机上的提示。
使用 answer 中的详细信息,我想出了这个:
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*\a\]"
PS1=${ORIG}${TITLE}
}
function fn() {
set-title
ssh -t "bash --init-file <(echo \"export PS1=\\"$ORIG$TITLE\\"\")"
}
您可能必须在导出 PS1
之前获取您的 .bashrc
文件,因为 --init-file
使 bash
忽略初始化文件。 (出于某种原因我不需要...)。那么你应该用 echo \"cd $HOME; . .bashrc; export PS1=\\"$ORIG$TITLE\\"\"
替换 echo \"export PS1=\\"$ORIG$TITLE\\"\"
我经常从终端的不同选项卡启动一个终端 session 到服务器。我想创建一个函数,在启动 session 之前更改选项卡的标题,以便我可以轻松识别哪个选项卡打开了哪个 session。
让我们假设我的 session 是一个 ssh session。当我输入终端
fn myserver
其中 fn 是在 ~/.bashrc 中定义的函数:
function fn() {
set-title ""
ssh
}
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*\a\]"
PS1=${ORIG}${TITLE}
}
终端启动 session 并且选项卡的标题仅在 ssh session 结束后更改。我猜这是因为 session 在 fn 函数中打开,并且只有当函数 returns 被 PS1 实现时。如何在 session 开始之前更改 title/update 和 PS1 变量?
你是对的;将 TITLE
添加到 PS1
后,您的本地主机不会显示另一个提示,直到 ssh
退出。相反,立即输出 TITLE
。
function fn() {
set-title ""
ssh
}
function set-title() {
printf '\e]2;%s\a' ""
}
请注意,在 运行 ssh
之前在本地设置 PS1
无论如何都不会影响您在远程主机上的提示。
使用 answer 中的详细信息,我想出了这个:
function set-title() {
if [[ -z "$ORIG" ]]; then
ORIG=$PS1
fi
TITLE="\[\e]2;$*\a\]"
PS1=${ORIG}${TITLE}
}
function fn() {
set-title
ssh -t "bash --init-file <(echo \"export PS1=\\"$ORIG$TITLE\\"\")"
}
您可能必须在导出 PS1
之前获取您的 .bashrc
文件,因为 --init-file
使 bash
忽略初始化文件。 (出于某种原因我不需要...)。那么你应该用 echo \"cd $HOME; . .bashrc; export PS1=\\"$ORIG$TITLE\\"\"
echo \"export PS1=\\"$ORIG$TITLE\\"\"