为什么不处理此命令的awk
部分。当我直接以user1
运行时,它可以正常工作。
[zimmerman@SERVER1 check]# su user1 -c "ssh -i /home/user1/.ssh/id_rsa -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'"
Filesystem Size Used Avail Use% Mounted on
/dev/sdf1 1008G 204M 957G 1% /dir1/dir2
答案 0 :(得分:1)
当你把所有这些东西组合在一起时,你需要确保你逃脱了你现在不想评估的所有重要角色,但是后来的角色。 $
就是一个很好的例子。
$ su user1 -c "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'"
评估当前bash中的$5
,这是您不想要的。如果你只是
$ echo "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'"
ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print }'
因此,要修复它,您需要转义$
符号,例如
$ echo "ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print \$5}'"
ssh -i [...] -q user1@SERVER2 df -h /dir1/dir2 | awk '{print $5}'
TL; DR :所以你应该使用的最终命令行是
su user1 -c "ssh -i /home/user1/.ssh/id_rsa -q user1@SERVER2 df -h /dir1/dir2 | awk '{print \$5}'"