다음과 같이 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의 변수에 저장할 때 발생했던 문제를 해결했습니다.