下面是我脚本的一部分,但我一直在努力寻求解决方案。 我正在使用pssh命令和awk来从用户输入的OS命令中过滤特定的列。 使用pssh命令执行awk时,对任何用户sudo都只会出现问题。
以下为我提供正确的输入。
pssh -h /tmp/hosts -i 'echo $(echo ), $(uptime|awk '\''{print $3}'\'')'
[1] 13:15:40 [SUCCESS] Host1
, 75
[2] 13:15:40 [SUCCESS] Host2
, 59
[3] 13:15:40 [SUCCESS] Host3
, 147
但是当向suser发出sudo时,下面提供了不正确的输入(给出了uname -a的输出)。
sudo -i -u quser pssh -h /tmp/hosts -i 'echo $(echo ), $(uptime|awk '\''{print $3}'\'')'
[1] 13:16:11 [SUCCESS] host1
, 13:16pm up 147 days 4:48, 1 user, load average: 0.02, 0.05, 0.01
[2] 13:16:11 [SUCCESS] host2
, 13:16pm up 59 days 3:04, 0 users, load average: 0.52, 0.29, 0.22
[3] 13:16:11 [SUCCESS] host3
, 13:16pm up 75 days 3:38, 0 users, load average: 0.03, 0.02, 0.00
答案 0 :(得分:0)
我很确定您的报价不完整,即您的$3
在某处迷路了,您得到了:
$ echo $(echo ), $(uptime|awk '{print}')
, 16:54:39 up 7 days, 1:36, 14 users, load average: 0.30, 0.27, 0.27
在这种情况下,我总是建议启用外壳调试,即
$ set -x; echo $(echo ), $(uptime|awk '{print}')
++ echo
++ uptime
++ awk '{print}'
+ echo , 16:56:14 up 7 days, 1:37, 14 users, load average: 0.16, 0.25, 0.26
, 16:56:14 up 7 days, 1:37, 14 users, load average: 0.16, 0.25, 0.26
我认为您所缺少的就是也引用$
,即
$ pssh -h /tmp/hosts -i 'echo $(echo ), $(uptime|awk '\''{print \$3}'\'')'
要获取正确的报价,您可能必须使用数字\
。