循环通过aux并执行命令

时间:2015-09-14 20:29:54

标签: linux shell ubuntu

for i in `ps aux | grep /usr/bin/x2goruncommand | awk '{print $1,$13;}'`; do
server=`echo $i | cut -f1`
port=`echo $i | cut -f2`
su -u ${server} -c "DISPLAY:{$port}"
done

我正在尝试循环ps和awk。循环应该只返回5个结果但是在我上面的尝试中,结果变为10.本质上我的$ server变量在一行中返回,然后我的$ port变量在下一行中返回。我试图在一行中运行一个命令,在一行中包含$ server和$ port变量。

这是ps aux命令的输出:http://i.imgur.com/USTaNEk.png

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助

while read s p; 
do 
   echo $s $p; 
done < <(ps aux ...)

用你的行动取代回声。

答案 1 :(得分:1)

不要使用for循环来迭代 - for循环用于迭代。在第一次迭代中,$ i =“main2”,然后$ i =“5114”,然后$ i =“0.0”,依此类推。

您需要while read循环

ps aux | grep /usr/bin/x2goruncommand | awk '{print $1,$13}' |
while read server port; do
    su -u "$server" -c "DISPLAY:$port"
done