我有一艘班轮来收集错误有关每个 AIX VIO 服务器的信息,使用ssh
.但下面的命令不起作用。我正在通过管道传输命令以在 VIO 服务器上的 root shell 上执行 (oem_setup_env)
ssh -padmin@VIOS1 "print \"errpt -T PERM,TEMP -s 0610141418 -e 0701000018 \| awk -F " " '{print \$5,\$6,\$7,\$8,\$9}'\ | sort -u | sed -e "s/^/$(uname -n): /"\" | oem_setup_env"
出现以下错误。
sed: 0602-404 Function s/^/VIOS1: cannot be parsed.
答案1
你的引用全乱了。让文本oem_setup_env
在本地输入并传输过来会更容易ssh
:
ssh admin@VIOS1 oem_setup_env << 'EOF'
errpt -T PERM,TEMP -s 0610141418 -e 0701000018 |
awk '{print $5,$6,$7,$8,$9}' | sort -u | sed "s/^/$(uname -n): /"
EOF
为了远程实现,使用此处文档仍然更容易(比使用print
它是ksh
/zsh
特定的并且需要-r
避免解释反斜杠)来避免两层引用转义:
ssh admin@VIOS1 'oem_setup_env << "EOF"
errpt -T PERM,TEMP -s 0610141418 -e 0701000018 |
awk '\''{print $5,$6,$7,$8,$9}'\'' | sort -u | sed "s/^/$(uname -n): /"
EOF'