SSH経由でコマンドを実行すると、whileループでバックティックの問題が発生します。

SSH経由でコマンドを実行すると、whileループでバックティックの問題が発生します。

この質問は少し複雑です。詳しく説明しようと思います。

2台のコンピュータがあり、1つはローカルで、もう1つは192.168.1.2ローカルコンピュータに次の変数を設定しました。

CHECK="/home/test/Desktop/"

test私のローカルコンピュータとリモートコンピュータの両方に名前が付けられたユーザーが存在します。 SSH経由でローカルで次のコマンドを実行したいと思います。

ssh -n [email protected] "until [ `cat $CHECK/samplefile | grep "string"` ]; do touch  $CHECK/success; done"

私が達成したいのは、リモートシステムの$ CHECK / samplefileに "string"というエントリがあることを確認したいということです。見つかったら、untilループを終了して続行したいと思います。ただし、このコマンドを実行すると、次のエラーメッセージが表示されます。

cat: /home/test/Desktop//samplefile: No such file or directory

testしかし、私のリモートコンピュータには、ユーザーデスクトップのファイル名がサンプルファイルとして含まれていると確信しています。さらなる調査の後、untilバックティックに提供された条件文が実際にlocal代わりに実行されることがわかりましたremote(私のローカルデスクトップにはそのようなファイルはありません)。さらに、Untilループの残りのコマンドは正常に機能し、リモートコンピュータのデスクトップにSuccessという新しいファイルが作成されます。

問題がバックティックにあるかどうかはわかりません。過去3時間の間、この問題できつくできませんでした。どんな提案がありますか?

ベストアンサー1

あなたの質問が示すように、この代替品は次のとおりです。

`cat $CHECK/samplefile | grep "string"`

ローカルコンピュータで実行されます。次の方法で簡単に修正できます。

ssh -n [email protected] \
"until { cat ""$CHECK""/samplefile | grep ""string""; }; do \
touch  ""$CHECK""/success; \
done"

ご覧のとおり、変数を解析する以外に置換は必要ありません$CHECK。条件付き命令を{...}リストに入れることができ、リストの終了コードがuntil命令に対して決定されます。

おすすめ記事