多个选项卡和Bash脚本

时间:2018-01-22 10:33:05

标签: bash ssh tabs gnome

我正在尝试打开多个标签并在每个标签中执行一系列命令。让我们说我打开3个标签tab1,tab2,tab3。然后在每个标签中我想执行以下内容:

  • ssh user @ address(设置PublicKey身份验证并且 因此无需输入密码)

  • 启动python脚本(python some.py)

  • 执行命令后按住选项卡以查看输出。

我经历了一些线程并对Bash脚本进行了粗略的概述。

#!/bin/bash

echo "Script running"
gnome-terminal -e "bash -c \"ssh user@address; uname -a; exec bash\""

当我运行上面的脚本时,会打开一个新的终端,我可以看到我已经ssh-ed到目标地址但是另一个命令uname -a没有执行。

我想在此基础上实施以下内容:

  1. 打开多个标签并运行命令。例如:gnome-terminal --tab -e "bash -c \"ssh user@address; python file1.py; exec bash\"" -tab -e "bash -c \"ssh user@address; python file2.py; exec bash\""

  2. 等待其中一个python文件在打开之前开始执行     另一个选项卡,并重复另一个python文件的过程。

  3. 还有更好的方法来实现相同的任务吗?

    上面的代码段来自this thread

1 个答案:

答案 0 :(得分:2)

您应该考虑使用screentmux或类似的终端多路复用器。

使用示例:

screen -d -m bash -c 'ls; bash'

启动执行ls然后启动shell的屏幕会话,然后

screen -X screen bash -c 'date; bash'

在现有的屏幕会话中创建一个新的窗口,在其中运行date,然后在该窗口中启动一个shell。

请注意,程序在没有您立即在控制终端上看到输出的情况下运行。然后,您可以使用

附加到屏幕会话
screen -x

将您连接到正在运行的会话,并显示一个屏幕窗口(两个正在运行的程序的虚拟终端)。键入 Ctrl-A n 将切换到窗口, Ctrl-A d 将再次分离您,离开程序正在运行,因此您可以稍后使用screen -x附加。

您可以从多个位置(例如,从两个不同的Gnome终端)连接到相同的运行窗口。两者都将显示相同的内容。

使用screen的另一个好处是您可以注销并继续运行程序。如果您稍后再次登录,您仍然可以附加到正在运行的会话。

只有直接攻击,例如重启,终止信号或交互(例如在连接时按 Ctrl-C )将终止您的程序。