我vte.sh
在我的.bashrc
. 这样做的一件事是它导致 Bash"\033]7;file://$HOSTNAME$PWD\007"
作为PROMPT_COMMAND
. 这使用转义序列“OSC 7”向file://mylocalbox/home/kerrick
终端发送一个值,告诉它当前的主机名和目录是什么。当您在 GNOME 终端中打开一个新选项卡时,它会使用来自 OSC 7 的信息在与前一个选项卡相同的目录中打开终端。
我想配置 GNOME 终端,这样如果当前选项卡正在运行 SSH 会话,启动新选项卡将通过 SSH 进入同一主机并切换到同一目录。换句话说,如果 OSC 7 值类似于file://myremotebox/foo/bar
,它将运行exec ssh -t myremotebox 'cd /foo/bar && exec bash -l'
而不是默认终端会话。
我如何配置 GNOME 终端来执行此操作?
它不支持此功能,您需要修改其源代码。如果您习惯于接触外国 C++ 代码,这可能是一项相当简单的任务。
笔记:
虽然您当然可以想出一个适用于大量案例的补丁,但总会有一些案例无法 100% 可靠地处理。
也许远程用户名与本地用户名不同。用户名不是 OSC 7 序列的一部分,因此您无法分辨远程用户名是什么。
也许远程主机名(远程主机自称)不能在本地主机上用于解析其地址。
也许该站点是通过多个 ssh 跃点到达的。
也许 sshd 正在非默认端口上运行。
也许它不是 ssh,而是老式的 rsh / telnet 或类似的东西。
可能还有更多......像这样的案例很难使这样的功能符合主流包含的条件,它会经常中断(尤其是用户名不匹配在实践中是一个有效的问题)。OSC 7 为您提供有关您所在位置的部分信息,而您需要的是如何到达那里。