我知道标题有点困惑,但这是我的情况
#!/bin/bash
for node in `cat path/to/node.list`
do
echo "Checking node: $node"
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no me@$node "nohup scriptXYZ.sh"
done
基本上 scriptXYZ 有一个输出。类似于:Node bla is Up
或 Node bla is Down
。我想做一些相当于以下伪代码的事情:
if (output_from_scriptXYZ == "Node bla is Up")
do this
else
do that
我一直在尝试找到一种在线执行此操作的方法,但找不到执行此操作的方法。再一次,我可能不知道我在寻找什么。
还有一个好处:有什么方法可以判断 scriptXYZ 在运行时是否有错误?类似于“文件不存在”之类的东西——不是脚本本身,而是脚本试图做的事情,因此导致了错误。
最佳答案
首先,是否可以让 scriptXYZ.sh
在节点启动时以 0 退出,否则为非零?然后您可以简单地执行以下操作,而不是捕获输出。脚本标准输出和标准错误将连接到您的本地终端,因此您将看到它们就像在本地运行一样。
#!/bin/bash
while read -r node; do
echo "Checking node: $node"
if ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no me@$node scriptXYZ.sh; then
do something
else
do something else
fi
done < path/to/node.list
使用 nohup
运行脚本没有任何意义,因为您需要保持连接才能将结果发送回本地主机。
关于linux - 从在另一个脚本中运行的脚本中获取输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12484163/