我想要一个脚本,首先使用 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