对于日常工作,我通过 VNC 从我的 Mac 登录到远程机器。在视网膜显示屏上看,VNC 查看器中的字体渲染和分辨率等都很糟糕。所以我使用 iTerm2 + ssh + screen。我在服务器中有多个屏幕会话,名称分别为 Terminal_1、Terminal_2 等。我在服务器中有一个脚本,它会打印请求的会话的确切会话名称 (PID.Terminal_*),或者在请求的会话不存在时创建一个会话。我在本地 Mac 中有一个 bash 函数,它会 ssh 到服务器,运行脚本,获取屏幕会话并对其执行“screen -x”(-x 是因为我有时与其他人共享会话)。
完成所有这些设置后,重新连接到我的屏幕会话现在非常简单,因为我只需在重新打开 iTerm2 或重新连接到网络后输入“r 1”、“r 2”等。因此,我在 iTerm2 中打开多个选项卡,首先运行 r 1,然后运行 r 2,依此类推。
我想知道是否有办法通过 iTerm2 - Shell 集成从 shell 获取选项卡号,这样我只需要在每一个选项卡中输入 r(r 是我添加的 bash 函数的别名),或者使用 precmd 可能输入更少的字符。
更新:在环境变量中ITERM_SESSION_ID=w0t2p0:xxxxx-xxxxx-xx
,w 和 t 似乎代表 Window 和 Tab。第一个有 w0t0p0,第二个有 w0t1p0,依此类推。
答案1
这似乎有效。echo ${ITERM_SESSION_ID:3:1}
请有人建议是否有更好的方法来实现这一点。
答案2
如果您想要使用编号少于 10 和多于 10 的标签,那么您将需要一些灵活的东西。
ITERM_SESSION_ID
包含类似于w0t0p0:01234567-89AB-CDEF-0123-4567890ABCDE
窗口编号、选项卡编号、窗格编号和 GUID 的内容。重要的是,如果您的唯一窗口中有 15个选项卡而没有窗格,您将获得以下前缀:w0t0p0
,,,,,,,,,,,,,,,,,。w0t1p0
w0t2p0
w0t3p0
w0t4p0
w0t5p0
w0t6p0
w0t7p0
w0t8p0
w0t9p0
w0t10p0
w0t11p0
w0t12p0
w0t13p0
w0t14p0
你可以用这个来回应不同的部分:
if [[ $ITERM_SESSION_ID =~ w([0-9]+)t([0-9]+)p([0-9]+):* ]];
then
echo ${BASH_REMATCH[1]} ${BASH_REMATCH[2]} ${BASH_REMATCH[3]}
fi
或者使用以下命令将它们设置为变量:
[[ $ITERM_SESSION_ID =~ w([0-9]+)t([0-9]+)p([0-9]+):* ]] \
&& W="${BASH_REMATCH[1]}" T="${BASH_REMATCH[2]}" P="${BASH_REMATCH[3]}"