我有一个脚本,可以让我更轻松地连接到我需要通过 SSH 连接到的许多服务器。它运行良好,除了终端的标题(在我的情况下为 Konsole 选项卡标题)被设置为我的脚本名称“() ./scripts/ssh”。我更新了脚本并添加了一个调用来qdbus
设置 Konsole 选项卡标题。它可以工作,但只有在 SSH 会话关闭/脚本完成之后。
如何使qdbus
命令立即生效?
剧本
#!/bin/bash
ENV=$1
HOST=$2
USER=${3:-my_username}
if [ -z ${ENV} ]; then
echo "First parameter must be the environment."
exit -1
fi
if [ -z ${HOST} ]; then
echo "Second parameter must be the host."
exit -1
fi
case "$ENV" in
# cases to determine proper hostname from abbreviated input
*)
echo "Unsupported environment: ${ENV}"
exit -1
esac
HOST="${HOST}.${ENV}.net"
# set tab title
qdbus >/dev/null "${KONSOLE_DBUS_SERVICE}" ${KONSOLE_DBUS_SESSION} setTabTitleFormat 0 "${USER}@${HOST}"
echo "Connecting to ${HOST} as ${USER} ..."
ssh ${USER}@${HOST}
# revert tab title -- COMMENTED OUT FOR TESTING
# qdbus >/dev/null "${KONSOLE_DBUS_SERVICE}" ${KONSOLE_DBUS_SESSION} setTabTitleFormat 0 "%w"
当我运行我的脚本...
- 选项卡文本更新为
() ./scripts/ssh
- 显示“正在连接”回声
- 我照常使用 SSH
- 选项卡文本未更新
当我退出 SSH 会话时,选项卡文本设置"${USER}@${HOST}"
为上面的命令(之前ssh
)。
我添加/注释了一行,它将标签文本恢复到我运行脚本之前的状态(我认为)。