如何存储bash脚本ssh调用的响应而不是调用本身?

时间:2011-08-24 23:13:00

标签: string bash ssh awk

我正在通过一个脚本在大约150台RHEL服务器上进行数据收集,该脚本被复制(scp)到每个服务器,然后通过ssh运行。在监控服务器上,我有:

H="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD "
RESULT=`$H`;
echo $RESULT;

该脚本返回以冒号分隔的九个值。然后我用这样的东西设置九个变量:

HST=`$H | awk -F' : ' '{ print $1}`

但是,我可以通过速度告诉它每次都要去远程服务器而不是去服务器一次并将响应设置为字符串。现在已经很晚了,我对此感到恼火。有人能为我解答这个问题吗?如果我说HST= $ RESULT ...`它会尝试执行命令并给我命令找不到,所以我知道这不对。

3 个答案:

答案 0 :(得分:2)

如果您不想每次都去服务器,请保存结果。

CMD="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD"
RESULT=$($CMD)
V1=$(echo $RESULT | awk -F ' : ' '{print $1}')
V2=...

答案 1 :(得分:0)

这是对迪特里希的反应的增强:

CMD="ssh cshoults@ /usr/local/sc/collect.sh $SENDER $OUTPUTMETHOD"
RESULT=$($CMD)
N=1
while [ $N -le 9 ]
do
    eval V$N=`echo $RESULT | cut -d: -f$N`
    N=`expr $N + 1`
done

答案 2 :(得分:0)

通过旁白,您可以使用特殊形式的$@拆分为set;

# Save current IFS
oldifs=$IFS
# Temporarily set up to split on colons
IFS=:
# Split $RESULT into $@
set -- $RESULT
# Restore IFS
IFS=$oldifs
# Result is now in $1 $2 $3 etc