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

うまくいきますが、スクリプトを実行した後にログインmachine36してmachine37開いている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が取得されます。

おすすめ記事