안녕히 가세요.
awk를 사용하여 SSH를 통해 원격으로 연결할 때 물결표를 분리하려고 합니다. localhost에서 명령을 실행하면 명령이 예상대로 작동합니다. 원격 서버에서 동일한 명령을 사용하려고 하면 구문 오류가 반환됩니다.
-bash-4.2$ /opt/SMAW/bin/RtpDumpLog -s 2111250000 | awk '$4 ~ /major/ { print }'
05-12-2021 02:11:20 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[32721]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:21 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[32724]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:22 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[32726]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:25 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[911]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:11:27 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[914]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:12:10 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[1081]: fatal: Write failed: Connection reset by peer [preauth]"
05-12-2021 02:12:11 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[1083]: fatal: Read from socket failed: Connection reset by peer [preauth]"
05-12-2021 02:15:24 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[2332]: fatal: Write failed: Connection reset by peer [preauth]"
06-12-2021 19:18:14 141-9994 major "OEM:cscf0002vm003oam001:sshd: sshd[30695]: fatal: Write failed: Broken pipe [preauth]"
원격 서버로:
-bash-4.2$ ssh -q 192.168.210.142 "/opt/SMAW/bin/RtpDumpLog -s 2111250000 | awk '$4 ~ /major/ { print }'"
awk: cmd. line:1: ~ /major/ { print }
awk: cmd. line:1: ^ syntax error
물결표를 구분하기 위해 백슬래시를 사용해 보았습니다.
-bash-4.2$ ssh -q 192.168.210.142 "/opt/SMAW/bin/RtpDumpLog -s 2111250000 | awk '$4 \~ /major/ { print }'"
awk: cmd. line:1: \~ /major/ { print }
awk: cmd. line:1: ^ backslash not last character on line
조언해주세요.
감사합니다, 비요른
답변1
awk
원격 호스트에서 실행 하지 마세요 :
ssh -q 192.168.210.142 /opt/SMAW/bin/RtpDumpLog -s 2111250000 |
awk '$4 == "major"'
문제는 물결표가 아니라 $4
큰따옴표로 묶인 문자열에 물결표를 사용하고 있다는 사실입니다. $4
호출 셸에서 해당 값이 비어 있었기 때문에 제거되었음을 알 수 있습니다 .
원격 호스트에서 전체 파이프라인을 실행해야 하는 경우 여기에 참조된 문서에 제공된 스크립트를 사용하는 것이 좋습니다.
ssh -q 192.168.210.142 sh -s <<'SCRIPT_END'
/opt/SMAW/bin/RtpDumpLog -s 2111250000 |
awk '$4 == "major"'
SCRIPT_END
를 사용하면 -s
명령 은 여기 명령 문서 sh
에 연결된 표준 입력 스트림에서 읽혀집니다 . 나는 귀하의 로그인 쉘이 무엇인지 모르기 때문에 여기서 명시적으로 호출하기로 ssh
결정했습니다 . sh
표준 쉘이라면 sh
포기할 수도 있습니다 sh -s
.