执行命令并将命令输出存储到变量

时间:2014-03-20 09:51:12

标签: bash shell unix

此脚本从hosts.txt读取系统IP,登录系统,检查操作系统类型,执行一组命令并打印输出。

ssh部分工作正常,但是在显示' ls''

的输出后显示错误(没有这样的文件或目录)。

似乎命令/opt/hyperic/agent-current/bin/hq-agent.sh未在远程主机上执行。打算执行命令& cd / opt; ls并将命令输出捕获到host.txt中提到的每个远程系统上的STATUS。

当我在远程系统上运行manaully命令时,将返回以下输出。对这里可能出错的任何帮助?

  ~]# /opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'

isrunning

脚本如下

#!/bin/bash
 while read host; do
 if ssh -o StrictHostKeyChecking=no -n root@$host '[ "$(awk "/CentOS/{print}" /etc/*release)" ] '
   then
    echo "(centos)"
    ssh -o StrictHostKeyChecking=no -n root@$host 'cd /opt;ls'
    STATUS=`/opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'`
   if [ "$STATUS" == "isrunning" ]
   then
      echo "$HOST == PASS"
   else
      echo "$HOST == FAIL"
  fi
  else
    echo "(generic)"
  fi
  done < hosts.txt

脚本输出 -

 root@10.10.1.1's password:
   firstboot
  puppet
  ./hq-enhanced.sh: line 14: /opt/hyperic/agent-current/bin/hq-agent.sh: No such file or   directory
  == FAIL

1 个答案:

答案 0 :(得分:1)

啊......我明白发生了什么:

问题的关键是:

ssh -o StrictHostKeyChecking=no -n root@$host 'cd /opt;ls'
STATUS=`/opt/hyperic/agent-current/bin/hq-agent.sh status | awk 'NR==1{print $3 $4}'`

ssh命令立即运行并将控制权返回给脚本 - 此时您不再通过ssh登录,并且无论您从何处运行脚本,都会执行启动STATUS的行。

要捕获ssh命令的输出,您需要以下内容:

STATUS=`ssh root@foobar -c 'cd /foo/bar && /opt/hyperic/agent-current/bin/hq-agent.sh ...'`

HTH