SSHセッションでパイプを使用した読み取りが失敗するのはなぜですか?

SSHセッションでパイプを使用した読み取りが失敗するのはなぜですか?

findで見つけたフォルダの代わりに空白行が表示されるのはなぜですか?

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null \
  -o batchmode=yes -o passwordauthentication=no [email protected] \
  "sudo find /folder/CFGKCP/KCS\ Pro/Job\ Setup -name JOBCFG.info \
    | while read linea; do echo $linea; done";

ベストアンサー1

Romeoが指摘したように、コマンドの周りに二重引用符を使用します。これは、コマンドを実行する前に変数が拡張されることを意味しますssh。したがって、whileループの本文は次のようになります。

echo $linea

以前は存在しなかった可能性があるため、渡されssh lineaたコマンドは空の文字列にecho置き換えられます。linea

コマンドパラメータの周りに一重引用符を使用すると、パラメータ拡張が発生せず、文字列がそのまま渡されるので問題ありません。

ssh -o stricthostkeychecking=no -o userknownhostsfile=/dev/null -o batchmode=yes -o passwordauthentication=no [email protected] 'sudo find /folder/CFGKCP/KCS\ Pro/Job\ Setup -name JOBCFG.info | while read linea; do echo $linea; done'

あるいは、エスケープすると$シェルが拡張しないように指示します。

おすすめ記事