linux - 从在另一个脚本中运行的脚本中获取输出

标签 linux bash sh

我知道标题有点困惑,但这是我的情况

#!/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 UpNode 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/

相关文章:

linux - Docker 如何在 macOS 主机下运行 Linux 内核?

shell - 如何从 Shell 脚本的属性文件中获取变量值?

bash - 在 Bash 或 Shell 脚本中转发函数声明?

java - 使用 Java Runtime.exec 在 Ubuntu 中通过终端触发命令

c++ - 如何使用 C++ 在 Linux 中检测进程何时终止?

mysql - 亚马逊 ec2 托管服务器 ip 地址

bash - 你如何在 bash 中解析文件名?

linux - 获取前 5 行并放入另一个文件的 bash 脚本

arrays - Bash 将 curl 结果存储到数组中

bash - 为什么正确的 shell 脚本会给出包装/截断/损坏的错误消息?