2016-02-26 68 views
1

为什么该命令的awk部分未得到处理。当我直接运行它作为user1时它工作。ssh作为不同用户的远程命令

[[email protected] check]# su user1 -c "ssh -i /home/user1/.ssh/id_rsa -q [email protected] df -h /dir1/dir2 | awk '{print $5}'" 

Filesystem   Size Used Avail Use% Mounted on 
/dev/sdf1   1008G 204M 957G 1% /dir1/dir2 
+0

提供了最小的例子什么不行,你得到什么和你的期望。当你将'su','ssh'和管道组合成长命令并且没有告诉你想要什么/什么是问题时,这是不可能回答的。 – Jakuje

+0

感谢您的反馈。 当我运行时: su user1 -c“ssh -i /home/user1/.ssh/id_rsa -q user1 @ SERVER2 df -h/dir1/dir2 | awk'{print $ 5}'” 我得到输出: /dev/sdf1 1008G 204M 957G 1%/ dir1/dir2 而不是只有1%,这是awk命令的附加值。 – ashrufr

回答

1

当你相结合所有这些东西,你需要确保你逃避所有你不想现在来评价的重要人物,但后来一个。 $就是一个很好的例子。

$ su user1 -c "ssh -i [...] -q [email protected] df -h /dir1/dir2 | awk '{print $5}'" 

评估在目前的庆典,这是你不想要的$5。你可以看到它,如果你运行简单

$ echo "ssh -i [...] -q [email protected] df -h /dir1/dir2 | awk '{print $5}'" 
ssh -i [...] -q [email protected] df -h /dir1/dir2 | awk '{print }' 

因此,要解决这个问题,你需要躲避$迹象,如

$ echo "ssh -i [...] -q [email protected] df -h /dir1/dir2 | awk '{print \$5}'" 
ssh -i [...] -q [email protected] df -h /dir1/dir2 | awk '{print $5}' 

TL; DR:所以最终的命令行,你应该使用是

su user1 -c "ssh -i /home/user1/.ssh/id_rsa -q [email protected] df -h /dir1/dir2 | awk '{print \$5}'" 
+0

谢谢。这工作。 – ashrufr