bash – ssh ksh grep wc

如果某些应用程序在某些远程计算机上运行,​​我正试图“ping”.

为此,我有一个包含服务器和应用程序的文件,例如:

server1:application1
server2:application1
server3:application2
Etc.

我希望获得在服务器中运行的具有此名称的应用程序数.

连接和检查我需要一个ssh连接.

我的脚本是bash,就像这样:

Ping_Applications () {    
    SetParam
    cat $APPFILE | while read next
    do
     server=`echo $next | cut -d : -f1`
     app=`echo $next | awk -F":" '{print $2}'`

     commando="/bin/ssh $server '/bin/ps -fea | /bin/grep $app | /bin/grep -v grep | /bin/wc -l'"
     eval COMA=\$\($commando\)
     echo $commando

     if [ $COMA != 0 ]
     then
      echo -e "$TIME : Application $app of on server $server is \E[32m[ RUNNING ]\E[0m";
     else
      echo -e "$TIME : Application $app of on server $server is \E[31m[ NOT RUNNING ]\E[0m";
     fi
    done;  
}

我的问题是,当我发送

ssh $server 'ps -fea | grep $app | grep -v grep | wc -l'

这会返回数字,但是当使用脚本发送时,我没有回答,因为(我认为)管道打开了一个新的shell.

我不知道如何解决这个问题.

任何的想法?

谢谢

路易斯

最佳答案 这是
Bash FAQ 50

您希望将命令放在数组中,而不是使用eval来调用它:

commando=( /bin/ssh $server '/bin/ps -fea | /bin/grep "'"$app"'" | /bin/grep -v grep | /bin/wc -l' )
COMA=$( "${commando[@]}" )

commando是一个包含3个元素的数组,因此最后一个元素可以作为单个单词传递给远程服务器.请注意$app周围的引用

此外,由于$COMA将是一个数字,使用数字比较:if [$COMA -ne 0]

点赞