GNU画面を使用して連続してコマンドを実行します。 (次のコマンドは、前のコマンドが完了した後にのみ実行されます。)

GNU画面を使用して連続してコマンドを実行します。 (次のコマンドは、前のコマンドが完了した後にのみ実行されます。)

複数のコマンドを順番に重ねるために画面コマンドを使用しようとしています。まず、Pythonスクリプトを実行してから、このようにSSHホストに接続します。

$ HOSTNAMEはスレーブノード-1です。 $ argはarg2です。

screen -dmS 1 sh -c "python3 pyscript1.py arg && \
ssh -i ~/.ssh/my-ssh-key user@remote-node \
"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt"\
;exec bash"

私がscreenを使用する理由は、これが私が実行する唯一のコマンドではなく、実行中にpyscript1.pyの出力を監視できる必要があるためです。

このコマンドは「1」という新しい画面を生成し、「arg」引数を使用してpyscript1.pyスクリプトを実行する必要があります。コマンドが完了したときのみ、このコマンドを使用してリモートホストに接続してファイルを変更したいと思います。

exec bashの目的は、コマンドが完了した後でも画面を開いたままにすることです。

sedコマンドのみを入力すると機能します。

を使って「1」という画面を作成することもできますscreen -dmS 1

SSH を使用してサーバーに接続することもできます。

しかし、上記のコマンドを実行しても何も起こりません。新しい画面も作成されません。

私が走るとき

ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt"

欲しい効果を得ました。

しかし、私が試したとき

screen -dmS 1 sh -c "ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt";exec bash"

何もしない

私は何が間違っていましたか?

答え1

いくつかの引用問題があります。

オリジナル:

screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"

改行のある人が読めるバージョン

screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\
"user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"

そうかもしれないと思います。

"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt"

引数はでなければなりませんssh

修正されたコード:

screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\
"user@remote-node \"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt\";"\
"exec bash"

関連情報