繁体   English   中英

如何在内联 ssh 命令中使用 awk {print}

[英]How to use awk {print} inside an inline ssh command

我正在尝试运行如下所示的内联 ssh 命令:

ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print $3}'"

我希望输出为3.8G (因为这是第二行,第三列),但相反,我得到了/dev/sda1 6.9G 3.8G 2.8G 58% / (整个第二行)。

这意味着FNR == 2有效,但{print $3}无效。

如果我直接在我使用 ssh 的机器上运行该命令,那么我会得到预期的结果,只是在通过上面的内联 ssh 命令调用它时不会。

此代码最终将在 bash 脚本中运行。 难道不能用这种方式打印吗? 如果没有,您是否可以建议另一种方法? 我对终端生活比较陌生,所以请耐心等待。

贝壳报价的乐趣。 线路:

ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print $3}'"

由 shell 解析,它使用两个参数调用ssh

user@127.0.01df / -h | awk 'FNR == 2 {print }' df / -h | awk 'FNR == 2 {print }' $3是内插的,并且(我假设)是空的。 为了防止这种情况,您有很多选择。 其中之一是:

ssh user@127.0.0.1 << \EOF
df / -h | awk 'FNR == 2 {print $3}'
EOF

另一个是:

ssh user@127.0.0.1 sh -c '"df / -h | awk '"'"'FNR == 2 {print $3}'"'"'"'

问题在于您传递ssh参数的方式。

通过调用:

ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print $3}'"

您正在传递两个参数:

  • user@127.0.0.1
  • "df / -h | awk 'FNR == 2 {print $3}'"

由于您的第二个参数在双引号内给出,因此$3变量将被扩展。 您可以通过转义美元符号来防止这种变量扩展:

ssh user@127.0.0.1 "df / -h | awk 'FNR == 2 {print \$3}'"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM