iTerm2:从 bash shell 获取选项卡号

iTerm2:从 bash shell 获取选项卡号

对于日常工作,我通过 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,,,,,,,,,,,,,,,,,。w0t1p0w0t2p0w0t3p0w0t4p0w0t5p0w0t6p0w0t7p0w0t8p0w0t9p0w0t10p0w0t11p0w0t12p0w0t13p0w0t14p0

你可以用这个来回应不同的部分:

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]}"

相关内容