2011-02-08 24 views
4

whileループで関数を呼び出す簡単なスクリプトを作成しました。 whileループが正しく動作することを確認しました。 doセクションでは関数を呼び出します。これも正常に動作します。しかし、関数の実装でsshを使用してリモートホスト上でコマンドを実行するとすぐに、whileループを呼び出すことができなくなります。最初の反復では、関数呼び出しは成功し、コマンドはリモートホスト上で呼び出され、結果は期待どおりに返されます。しかし、スクリプトは、あたかも私がhaventではない関数の実装で終了したかのように終了します。予想されるようにループが実行されている間、私はスクリプト関数でのssh呼び出し

local res=`echo $cmd` 

と外側のライン

local res=`$cmd` 

を交換する場合

#!/bin/bash 

function update_relevant_domUs() { 
     if [ $# -eq 0 ] 
     then 
       fatal not enough arguments 
     fi 
     if [ $# -gt 2 ] 
     then 
       fatal "unsupported number of arguments $#" 
     fi 

     if [ $# -eq 2 ] && [ "$1" != "Domain-0" ] && [ "$1" != "Name" ] 
     then 
       #printf "$NAME \t $STATE\n" 
       local cmd="ssh [email protected]$1 /usr/bin/zypper --non-interactive refresh" 
       printf "Executing command: $cmd\n" 
       #`ssh [email protected]$1 echo \$PATH` 
       local res=`$cmd` 
       local ret=$? 
       printf "Ret: $ret - Report: \n $res \n\f" 
     fi 
     return 0 
} 

xm list | while read NAME ID MEM VCPUS STATE TIME; do update_relevant_domUs $NAME $STATE; done 

。これについてのヘルプは非常に高く評価されます。

よろしく、

ajag

答えて

5

sshは、標準入力を消費しています。合格-n

+0

ありがとう、トリックでした! –

関連する問題