bash - 如何在内联 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 脚本中运行。不能用这种方式打印吗?如果没有,您可以建议另一种方法吗?我对终端生活比较陌生,所以请多多包涵。
解决方案
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}'"'"'"'
推荐阅读
- r - 一步中多个单变量条件的子集?
- java - 从 Java jdbc 应用程序登录 Oracle Express 18c
- amazon-web-services - AWS 胶水删除所有分区
- java - 你如何禁用trusted.packages 检查Spring-Kafka JsonDeserializer?
- postgresql - 默认约束名称保留在哪里?
- ionic-framework - 导航到 Ionic 3 中的特定选项卡
- meson-build - 如何将内置库的介子链接依赖项设置为“-lm -lrt”
- c# - 使用 .NET Core 检查数据库中唯一值的最佳方法
- powershell - 根据选择,特定行应使用批处理文件在 cmd.exe 中运行
- boost - 将代码更改为不使用 boost 中的命名空间