【问题标题】:How to run awk command across SSH with local variables - Bash [duplicate]如何使用局部变量在 SSH 上运行 awk 命令 - Bash [重复]
【发布时间】:2020-07-20 20:13:19
【问题描述】:

我有一个使用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 产生的这个错误?

【问题讨论】:

    标签: bash awk ssh


    【解决方案1】:

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

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

    命令返回了预期的结果。

    【讨论】:

      猜你喜欢
      • 2013-01-20
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-27
      相关资源
      最近更新 更多