원격 시스템의 grep

원격 시스템의 grep

콘텐츠가 포함된 템플릿 파일이 있습니다.

수량: 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

예제에서 이 작업을 수행하면 파일은 $2heredoc 처리 후에도 유지되며 ssh를 통해 원격 셸로 전달됩니다.

보너스 팁: 모든 것을 할 수 있기 cat | grep | awk때문에 이것은 이중 낭비입니다 . awk원격 명령은 다음과 같습니다.

awk -F":" '/count/ {print $2}' template > log

관련 정보