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

Yas*_*ash 3 bash shell quoting

我有以下shell命令:

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

我需要在ssh上运行它,但由于嵌套的双引号和单引号的存在,我得到语法错误.

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

但是,在运行本地系统时,将提供以下输出:

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

gle*_*man 6

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

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