首页 > 解决方案 > 如何使用局部变量跨 SSH 运行 awk 命令 - Bash

问题描述

我有一个命令,它使用awk我试图通过 SSH 远程运行。

这是在本地运行时的命令和示例输出:

df -h -P | awk '{print $1,$2,$3,$5,$6}'

Filesystem Size Used Use% Mounted
/dev/mapper/volgroup00-lv_root 3.9G 2.7G 74% /
tmpfs 2.9G 0 0% /dev/shm
/dev/mapper/volgroup00-lv_seemis 4.4G 3.6G 87% /STORE
/dev/sda1 477M 195M 44% /boot
/dev/sdb1 30G 26G 90% /data

该命令的输出然后由我的脚本的其余部分处理。但是,当我尝试远程运行该命令时,它会产生错误。这是远程命令及其产生的错误的示例(其中$servername是服务器的 FQDN 并且$user是 SSH 用户):

timeout 10s ssh -n $user@$servername "df -h -P | awk '{print $1,$2,$3,$5,$6}'"


awk: cmd. line:1: {print ,,,,}
awk: cmd. line:1:        ^ syntax error
awk: cmd. line:1: {print ,,,,}
awk: cmd. line:1:         ^ syntax error
awk: cmd. line:1: {print ,,,,}
awk: cmd. line:1:          ^ syntax error
awk: cmd. line:1: {print ,,,,}
awk: cmd. line:1:           ^ syntax error
awk: cmd. line:1: {print ,,,,}
awk: cmd. line:1:            ^ syntax error
awk: cmd. line:1: {print ,,,,}
awk: cmd. line:1:             ^ unexpected newline or end of string

我觉得这与远程运行命令时使用 $1、$2 等有关。如何解决awk正在产生的这个错误?

标签: bashawkssh

解决方案


在每个 $NUM 变量之前添加一个反斜杠可以解决问题:

timeout 10s ssh -n $user@$servername "df -h -P | awk '{print \$1,\$2,\$3,\$5,\$6}'"

该命令返回了预期的结果。


推荐阅读