콘텐츠가 포함된 템플릿 파일이 있습니다.
수량: 2
ssh ubuntu@ip << EOF
cat template|grep count|awk -F":" '{print $2}' > log
EOF
원하는 출력은 2입니다.
하지만 인쇄 중count : 2
답변1
여기에 있는 문서는 변수 확장과 유사한 참조 컨텍스트를 << EOF
생성합니다 . 거기에 로컬 쉘에 의해 확장된 이 "..."
있습니다 . $2
(아포스트로피는 더 큰 인용 문자열(heredoc) 안에 있기 때문에 아무 것도 인용하지 않으므로 특수 문자가 아닙니다. 중첩하여 "인용 수준을 높일 '...'
" 수 없습니다 "..."
.)
로컬 셸에는 인수가 없을 수 있으므로 $2
빈 문자열로 확장되지만 원격 셸은 stdin에서 수신합니다.
cat template|grep count|awk -F":" '{print }' > log
awk는 print
전체 라인입니다.
다음과 같이 종료 문자열에 아포스트로피 스타일의 따옴표를 추가하여 변수를 확장하지 않도록 heredoc 연산자에 요청할 수 있습니다.
ssh ... << 'EOF'
...
EOF
예제에서 이 작업을 수행하면 파일은 $2
heredoc 처리 후에도 유지되며 ssh를 통해 원격 셸로 전달됩니다.
보너스 팁: 모든 것을 할 수 있기 cat | grep | awk
때문에 이것은 이중 낭비입니다 . awk
원격 명령은 다음과 같습니다.
awk -F":" '/count/ {print $2}' template > log