我编写了一个在while循环中调用函数的简单脚本。我已经确定while循环正常工作。在do部分,我调用了一个函数。这也很好。但是,只要我在函数实现中使用ssh在远程主机上执行命令,这似乎会破坏调用while循环。对于第一次迭代,函数调用成功,在远程主机上调用该命令,并按预期返回结果。然而,脚本结束就好像我在函数实现中做了一个退出,我没有。
#!/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 root@$1 /usr/bin/zypper --non-interactive refresh"
printf "Executing command: $cmd\n"
#`ssh root@$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
如果我换行
local res=`$cmd`
带
local res=`echo $cmd`
外部while循环按预期执行。对此的任何帮助将不胜感激。
最诚挚的问候,
ajag
答案 0 :(得分:5)
ssh
正在消耗stdin。通过-n
。