さようなら行ってください。
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
。