我有以下shell命令:
ssh user@host "df | grep /dev/ | \
awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} {split($5, a, "%"); \
var="GREEN"; print $1, $5, var}' | column -t"
我需要在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
答案 0 :(得分: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
答案 1 :(得分:3)
这是这里文件方便的案例:
ssh -t -t user@host<<'EOF'
df | awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} /dev/{split($5, a, "%"); var="GREEN"; print $1, $5, var}' | column -t
EOF
答案 2 :(得分:1)
远程运行df | grep
并使用awk
在本地处理输出要简单得多:
ssh user@host 'df | grep /dev' | awk '
BEGIN{print "DISK", "%USAGE", "STATUS"}
{split($5, a, "%"); var="GREEN"; print $1, $5, var}' | column -t