リモートマシンとローカルマシンの両方で複数の長時間実行コマンドを生成するスクリプトを作成しようとしています。現在、私の解決策の例は次のとおりです。
#!/bin/bash
ssh -t [email protected] tmux new -s remote -d "find / *"
tmux new -s local -d "find / *"
ただし、これらのコマンドがより複雑になると(1つのfind
コマンドではなく、引用符が含まれる長く連鎖したコマンド)、1行に配置して、ネストされた引用符をすべてエスケープするのは面倒になります。
いわゆる「ヒアドキュメント」でSSHを使用してみました。例:
ssh -t [email protected] << EOF
tmux new -s remote -d "find / *"
EOF
tmux new -s local -d "find / *"
ただし、これにより、SSHの-Tまたは-tオプションでエラーnot a terminal
が発生するか、-ttオプションを使用すると非常に奇妙な動作が発生します。
私のアプローチを最適化/劇的に変更するための提案はありますか?
このアイデア と この他のアイデア を組み合わせて、次のようなものを機能させることができるはずです。
CMDS=$(cat <<CMD
read -e -p "Enter the path to the find: " FILEPATH
echo \$FILEPATH
#find \$FILEPATH -name $FILENAME
#read -p done:
CMD
)
tmux new -s Finder -n remote "ssh localhost -t '$CMDS'" \; \
new-window -n local "bash -c '$CMDS'" \; \
attach \;
ボーナス-両方のコマンドが並行して実行され、同じtmux
セッションで実行されます。
実行するコマンドの複雑さによっては、引用とエスケープの問題が残る場合があります。また、read -p done
またはコマンドが実行、終了し、tmux
も出力が表示されずに終了することに注意してください。おそらくそれはあなたが意図したことであり、find
の使用は単なる例でした。