在ssh -X中未设置变量值

时间:2013-12-17 05:42:45

标签: bash shell unix ssh

我是Oracle DBA,我正在做一些脚本来检查我们的大量服务器上是否存在数据库。

我正在尝试将值设置为ssh -X中的变量,例如

[oracle@proddb02]$ DB_STAT=`ssh -X  proaddb01 'ps -ef | grep pmon | grep -v grep' | awk '{ print $8 }'`

[oracle@proddb02]$ echo $DB_STAT
ora_pmon_pconn01

上面的例子工作得很好但是因为我使用ssh命令我不能循环使用,因为它退出包含服务器列表的第一行文件。 所以我必须在命令中添加/ dev / null,以便它不应该退出循环。但是这不会设置变量值。 当我回应变量时,它什么都没有。

[oracle@proddb02]$ DB_STAT=`ssh -X  proddb01 'ps -ef | grep pmon | grep -v grep' | awk '{ print $8 }'</dev/null`
[oracle@proddb02]$ echo $DB_STAT

[oracle@proddb02]$ echo $DB_STAT

循环代码是

[oracle@proddb02]$cat test.sh

while read line
do
INST_VAR=`echo $line | awk '{ print $1 }'`
HOST_VAR=`echo $line | awk '{ print $2 }'`
SERVER_NAME=$HOST_VAR
INSTANCE_NAME=$INST_VAR
DB_STAT=`ssh -X  proaddb01 'ps -ef | grep pmon | grep -v grep' | awk '{ print $8 }'`
echo $DB_STAT
done < host_list.lst

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

只是做:

DB_STAT=`ssh -X  proaddb01 "ps -ef | awk '/[p]mon/'{ print $8 }"`

在这里使用:

  • //过滤输入流(如grep但是awj awk);
  • [p]grep从ps中排除相同行的技巧(因为[p]grep模板找不到[p]grep字符串。)