想像する:
リモートホストに接続し、ログファイルから特定のキーワードを検索するスクリプトがあります。 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