Bash 脚本:在两个终端之间切换以执行命令

Bash 脚本:在两个终端之间切换以执行命令

我想要一个脚本,首先使用 ssh 将我连接到远程 PC,然后在那里执行一些命令。这些命令启动一个进程,该进程将永远运行(用户输入后停止)。现在,我必须在本地 PC 上运行一些命令(不幸的是,在 ssh 之前无法运行它们)。所以我的想法是在连接到远程之前打开一个新终端,然后运行 ​​ssh 和命令,然后切换回本地终端并执行其余命令。两个输入是远程端口和本地端口。

到目前为止,我的脚本如下所示:

#!/bin/bash

echo "Connecting to server"
ssh -t -t <name>@ip << EOF
cd /path/to/directory &&
conda activate <environment_name> &&
tensorboard --logdir=<log/directory> --port $2
EOF
echo "Connected"

gnome-terminal -e exit
echo "Connecting with localhost"
ssh -N -f -L localhost:$1:localhost:$2 <name>@ip

但这不起作用。我只能连接到远程,之后无法打开 xterm,因为 tensorboard 一直在运行。那么,如何预先打开一个终端并切换回它呢?

或者还有其他关于如何解决此问题的建议吗?

提前谢谢了!

答案1

我会推荐byobu。我希望以下代码能够满足您的目的:

#!/bin/bash
# Check if there is already a session named 'remote'
if [ -z "$(byobu list-sessions | grep remote)" ]
    # If not, start a new session 
    then
    byobu new-window -n remote ssh user@remote;
    byobu send-keys -t remote 'conda activate <env>' 'C-m'
    byobu send-keys -t remote 'tensorboard --logdir=<log/directory> --port $2' 'C-m'
    byobu new-window -n local;
    byobu send-keys -t local 'ssh -N -f -L localhost:$1:localhost:$2 <name>@ip' 'C-m'
fi
# Attach session
byobu attach-session -t remote

在上面的代码中,我不确定什么是$1$2!我建议创建一个可访问的小函数(在.bashrc或可执行文件中$HOME/bin),它将接受这些参数...

希望这可以帮助!

-- 迈克

答案2

您是否考虑过在后台运行该作业?如果&在命令末尾附加一个 & 符号,则可以实现这一点。您可以bg使用以下命令将多个作业发送到后台,然后将它们带回前台fg

相关内容