Linux ssh远程命令作为不同的用户

Linux ssh远程命令作为不同的用户,linux,ssh,command,Linux,Ssh,Command,为什么此命令的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

为什么此命令的
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

当你把所有这些东西结合在一起时,你需要确保你避开了所有你现在不想评估的重要角色,但是以后要评估。
$
就是一个很好的例子

$ 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}'"

提供最简单的例子,说明什么不起作用,你得到了什么,你期望得到什么。当您将
su
ssh
和管道组合成long命令时,如果不告诉您想要什么/问题是什么,则无法回答。感谢您的反馈。运行时:su user1-c“ssh-I/home/user1/.ssh/id\u rsa-quser1@SERVER2df-h/dir1/dir2 | awk'{print$5}'”我作为输出获取:/dev/sdf1 1008G 204M 957G 1%/dir1/dir2,而不是仅1%,这是添加awk命令所期望的。