リモートホストに ssh を送信した後、EOF 内で grep を使用すると、「該当するファイルまたはディレクトリはありません」という出力が表示されます。

リモートホストに ssh を送信した後、EOF 内で grep を使用すると、「該当するファイルまたはディレクトリはありません」という出力が表示されます。

想像する:

リモートホストに接続し、ログファイルから特定のキーワードを検索するスクリプトがあります。 EOFがないとsshがハングしますが、heredoc(EOF)を使用すると問題がなくなります。すべてのコマンドは、リモートホストにSSHで接続した後に実行する必要があるため、EOFブロック内にあります。

grep コマンドは、端末で同じコマンドを実行している間、「該当するファイルやディレクトリはありません」という出力を提供し、目的の出力を提供しました。

問題のgrepコードは次のとおりです。

ssh -q -T username@remotehost <<-EOF 2>&1 | tee -a
getValue=$(grep -R 'keyword' /user/log/file.log | awk -F ' ' '{print$NF}') )
echo "${getValue}"
EOF

Output: grep: /user/log/file.log : No such file or directory

リモートホストを印刷し、ログパスとfile.logをさらにクロスチェックすると、SSHは正常に機能します。設定の観点から見ると、すべてが所定の位置にあります。インターネットを介していくつかの研究開発を行いましたが、これまで何の助けもありませんでした。

ベストアンサー1

'EOF'シェルが$ローカルで解釈されないようにするには、引用符を使用する必要があります。リモートコマンドを実行する前に、シェルでgrepを実行してください。

比較する:

ssh username@remotehost << 'EOF'
echo "THIS IS $(hostname)"
EOF

そして

ssh username@remotehost << EOF
echo "THIS IS $(hostname)"
EOF

おすすめ記事