运行 shell 通过 ssh 嵌套引号的命令

Running shell command that has nested quotes via ssh

我有以下 shell 命令:

ssh user@host "df | grep /dev/ | \
awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} {split(, a, "%"); \
var="GREEN"; print , , var}' | column -t"

我需要通过 ssh 运行 这个,但是由于存在嵌套的双引号和单引号,我收到语法错误。

我在引号的开头和结尾之前尝试了转义字符,但没有解决问题。

但是,在本地系统 运行ning 上,这将给出以下输出:

$ df | grep /dev/ | \
awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} {split(, a, "%"); \
var="GREEN"; print , , var}' | column -t
DISK       %USAGE  STATUS
/dev/sda1  95%     GREEN

引用的 heredoc 允许您省略外部引号:

ssh user@host <<'END'
df | grep /dev/ | awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} {split(, a, "%"); var="GREEN"; print , , var}' | column -t
END

这种情况下这里的文档就派上用场了:

ssh -t -t user@host<<'EOF'
df | awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} /dev/{split(, a, "%"); var="GREEN"; print , , var}' | column -t
EOF

只需远程 运行 df | grep 并使用 awk:

在本地处理输出就简单多了
ssh user@host 'df | grep /dev' | awk '
    BEGIN{print "DISK", "%USAGE", "STATUS"}
    {split(, a, "%"); var="GREEN"; print , , var}' | column -t