【发布时间】:2014-11-25 01:00:29
【问题描述】:
远程工作时,我会在 gnome-terminal 中打开一系列选项卡,以及在其中执行的命令。我想将所有这些设置自动化为一个命令。
如果这些命令可以独立并行运行,我会将答案改为this question。事实上,我尝试过,使用以下 shell 脚本:
gnome-terminal --working-directory="/home/superelectric" --tab -t "gate" -e 'bash -c "export BASH_POST_RC=\"ssh gate_tunnel\"; exec bash"' --tab -t "mydesktop" -e 'bash -c "export BASH_POST_RC=\"ssh tunneled_mydesktop\"; exec bash"'
为了便于阅读,分散在多行中:
gnome-terminal \
--working-directory="/home/superelectric" \
--tab \
-t "gate" \
-e \
'bash -c "export BASH_POST_RC=\"ssh gate_tunnel\"; exec bash"' \
--tab \
-t "mydesktop" \
-e \
'bash -c "export BASH_POST_RC=\"ssh tunneled_mydesktop\"; exec bash"'
第一部分打开一个选项卡,将其命名为“gate”,并在其中执行“ssh gate_tunnel”。这是一个 ssh 别名,可通过学校的外向服务器“gate”打开通往学校“mydesktop”的隧道。
第二部分打开另一个选项卡,将其命名为“mydesktop”,并在其中执行“ssh tunneled_mydesktop”。这是另一个 ssh 别名,通过隧道连接到 mydesktop。
~/.ssh/config:
Host gate_tunnel
LocalForward 8023 <my_desktop_at_school>:22
HostName <my_school_server>
这就是理论。实际上,这两个命令是并行执行的,而我需要确保第一个选项卡的命令(打开隧道)在执行第二个选项卡的命令(通过隧道连接)之前完成。
是否有一些命令我可以在第二个选项卡中执行,“等待”直到 ssh 隧道打开?
【问题讨论】:
-
锁定能回答你的问题吗? stackoverflow.com/q/169964/2157640如果是这样,您可以将其作为副本关闭。
-
最简单的方法是在第二个命令之前添加
sleep 10;之类的内容,但当然,这只有在您确定隧道会在 10 秒内打开(或您输入的任何数字)的情况下才有效)。你能告诉我确切的隧道命令是什么(或尽可能接近)吗? -
问题中引用了确切的隧道命令,在 ~/.ssh/config 中有以下条目: Host gate_tunnel LocalForward 8023
:22 HostName User SuperElectric ForwardX11 是 ServerAliveInterval 30 -
为什么需要在单独的选项卡中打开隧道?
-
@glennjackman 这正是我学会使用隧道的方式。该选项卡还可以让我轻松查看隧道是否仍处于打开状态。
标签: shell ssh tabs sysadmin gnome-terminal