如何在 bash 中写入 ssh 到不同的机器并创建 tmux 会话,然后在其中运行一些命令

如何在 bash 中写入 ssh 到不同的机器并创建 tmux 会话,然后在其中运行一些命令

基本上我想写一些脚本,比如

#!/bin/bash
for idx in 1 2 3 4 5 6
do
        echo machine$idx
        ssh machine$idx tmux new-session -d -s "myTempSession$idx" python run.py
done

它可以单独做这件事:

ssh machine$idx 

tmux new-session -d -s "myTempSession$idx"

python run.py

但经过多次尝试和错误,我仍然无法使其按预期工作。

更新根据 Tagwint 的建议,我的脚本是:

#!/bin/bash
for idx in 1 2 3 4 5 6
do
        ssh machine$idx <<REMSH
        tmux new-session -d -s "myTempSession"
        tmux send-keys -t -s "myTempSession" python Space run.py  C-m
        REMSH
done

但它提示:

./dist_run.sh: line 8: warning: here-document at line 4 delimited by end-of-file (wanted `REMSH')
./dist_run.sh: line 9: syntax error: unexpected end of file

更新我修改为

#!/bin/bash
for idx in 36 37
do
        ssh machine$idx <<REMSH
        tmux new-session -d -s "myTempSession"
        tmux send-keys -t -s "myTempSession" python Space run.py C-m
REMSH
done

这有效,但是运行脚本后,我登录machine36machine37进入打开的 myTempSession,但未python run.py执行

答案1

我建议你使用 HERE-DOC 方法

ssh machine$idx <<REMSH
tmux new-session -d -s "myTempSession$idx"
tmux send-keys -t "myTempSession$idx" python Space run.py  C-m 
REMSH

注意会话名称中的 $idx 部分很可能不会解析,除非您定义了 idx 环境变量,这样您将获得会话名称 myTempSession

相关内容