在ssh中使用参数运行多个命令

时间:2014-03-13 12:04:54

标签: linux bash shell ssh

我正在尝试从ssh运行一些命令。每个远程服务器中都有多个变量。

for db_serv in `olsnodes`; do
   for db_ins in `ssh $db_serv ps -ef | grep ora_pmon_ | grep -v grep | cut -d"_" -f3`; do
   SessionSayisi=`ssh $db_serv ps -ef | grep $db_ins | grep 'LOCAL=NO'|grep -vc ASM`
   echo "SessionSayisi= $SessionSayisi $db_ins"
   done
done

这很好用,但需要很长时间,因为命令正在为每个变量运行ssh。我需要为每个服务器只连接一次,然后获取所有变量输出,然后ssh到另一个。

这是我尝试过的但它不起作用:

 for db_serv in `olsnodes`; do
ssh $db_serv ps -ef | grep ora_pmon_ | grep -v grep | cut -d"_" -f3 << EOF
for db_ins in `ps -ef | grep ora_pmon_ | grep -v grep | cut -d"_" -f3`; do
echo "SessionSayisi= $SessionSayisi $db_ins"
done
EOF
done

1 个答案:

答案 0 :(得分:1)

看起来您只需要运行一个SSH命令 - 如果您在变量中捕获输出,那么您可以在该变量上而不是在远程计算机上运行其余命令:

for db_serv in $(olsnodes); do
    procs=$(ssh "$db_serv" ps -ef)
    for db_ins in $(echo "$procs" | grep ora_pmon_ | grep -v grep | cut -d"_" -f3); do
        SessionSayisi=$(echo "$procs" | grep "$db_ins" | grep 'LOCAL=NO'| grep -vc ASM)
        echo "SessionSayisi= $SessionSayisi $db_ins"
    done
done