使用时
df -h | grep /dev/root | awk '{print $5}'
我得到了 Pi 中 SD 卡的使用情况:78%
但是当我使用
/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print $5}'"
从另一台计算机上,我得到:
/dev/root 7.2G 5.3G 1.6G 78% /
满的df -h
:
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.2G 5.3G 1.6G 78% /
devtmpfs 364M 0 364M 0% /dev
tmpfs 368M 68K 368M 1% /dev/shm
tmpfs 368M 5.2M 363M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 368M 0 368M 0% /sys/fs/cgroup
/dev/mmcblk0p1 60M 21M 40M 35% /boot
tmpfs 74M 4.0K 74M 1% /run/user/1000
答案1
你遇到了引用问题;$5
在错误的时间被解释。至少有两种解决方案:
\
在 ;之前放一个$
;例如/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print \$5}'"
远程运行
df
但在grep
本地运行awk
。例如/usr/bin/ssh -i /path/to/key user@server df -h | grep /dev/root | awk '{print $5}'
FWIW,我会运行第二个选项的版本,但合并grep
并awk
/usr/bin/ssh -i /path/to/key user@server df -h | awk '/\/dev\/root/ {print $5}'
答案2
这应该有效:
/usr/bin/ssh -i /path/to/key user@server "df -h | grep /dev/root | awk '{print \$5}'"
请注意\
之前包含的$
.如果没有这个,本地 shell 将扩展空变量$5
并将其发送到远程服务器。本质上,打印整行。
答案3
为了完整起见,另一种方法是使用事实$n
inawk
不是$variable
像 shell 这样的语法的特殊情况,而是$
应用于整数表达式的运算符:
(ssh key&remote) "df -h | grep /dev/root | awk '{print $ 5}'"
或组合为
(ssh key&remote) "df -h | awk '/\\/dev\\/root/ {print $ 5}'"
# can use [/] instead of ugly \\/ in gawk, but maybe not others
或者作为变量可能更好
(ssh key&remote) "df -h | awk -vm=/dev/root '$ 0 ~ m {print $ 5}'"
但就我个人而言,我会同意斯蒂芬·哈里斯(Stephen Harris)在awk
本地运营的偏好。