首页 > 解决方案 > 如何在内联 ssh 命令中使用 awk {print}

问题描述

我正在尝试运行如下所示的内联 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 脚本中运行。不能用这种方式打印吗?如果没有,您可以建议另一种方法吗?我对终端生活比较陌生,所以请多多包涵。

标签: bashshellawkterminal

解决方案


shell 引用的乐趣。该行:

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

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

user@127.0.01并且df / -h | awk 'FNR == 2 {print }' The$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}'"'"'"'

推荐阅读