
次のように、heredocで出力をローカル変数に設定しようとしています。
REMOTE_OUTPUT=$(ssh remote@server /bin/bash << EOF
find my/path/ -type f -not -path my/path/*/ -type f -mtime -0 | while read filename; do
if grep "ERROR" $filename; then
filenamebase=$(basename "$filename")
echo -e "\n----------------------------------------------------------\n\n$filenamebase failure:\n"
grep -n "ERROR" "$filename" | sed G
fi
done
EOF)
ただし、 find&grep ループが正確で、実際に出力を返す必要がある場合でも、変数は空です。
(そうでなければ、heredocの出力をローカルファイルに書き込むことにも興味があります。)
答え1
EOF
たとえば、タグを引用するか、変数がリモート<<\EOF
で渡される前に評価されるのをやめる必要があります。<<'EOF'
代わりに say を使用して$filename
効果を確認できます。/bin/bash -v
/bin/bash
EOF
また、実際のマークアップを独自の行に配置し、最後の行を)
次の行に配置する必要があります。
答え2
これは一般的な例ですが、対話型nslookupを使用して同じことを実行できました。
output_text=`nslookup<<-monkies
www.google.com
exit
monkies`
echo "Output: $output_text"
コマンド全体をチルダで囲むと、出力を変数に保存できます。 heredocが実行するコマンドによっては常にきれいではありませんが、動作します。
これは、heredoc出力をbashの変数に保存するときに発生した問題を解決しました。