如何在管道之前测试命令,捕获它的输出并了解命令 运行 是否成功
How can I test a command before a pipe, capture it's output and understand if the command ran successfully or not
我正在编写一个脚本,它将在不同的服务器上自动执行命令,我正在尝试记录它的所有内容和输出。我在重定向和命令状态输出方面遇到困难。意思是命令成功了,它的输出是什么?
我尝试了很多方向,例如将命令输出重定向到函数或文件。我试过一个简单的 if 语句。两人都为那里的受人尊敬的职能工作。但是当我试图将它们结合起来时,脚本总是 return 命令成功。在某种程度上它是。
#!/bin/bash
function Executing(){
if [ "" != "" ]; then
if [ $DEBUG = "true" ]; then
echo "" | Debug i s
if 2>&1 | Debug o o;then
echo "" | Debug s r
else
echo "" | Debug e r
fi
else
eval
fi
fi
}
Executing "apt-get update"
另请注意,系统需要 sudo 才能执行 apt-get update。因此脚本应该报告并记录错误。现在,每当我调用 Executing 函数时,函数 return 都会成功执行。我很确定它确实如此,因为添加的管道 | debug o o
捕获输出并对其进行格式化。我稍后会重定向到日志文件。
所以我测试了 if apt-get update;then echo yes;else echo no; fi
它在我的终端上工作。但是一旦我将输出通过管道传递给调试函数,if 语句 returns true.
试试 set -o pipefail
。
查看手册:The Set Builtin
通常,bash returns 管道组的最后一个命令的退出代码,因此您的 Debug
命令是被检查的命令。使用该设置,bash returns 最后一个(最右边的)命令以非零状态退出的退出状态。如果您的命令失败,这就是传播的状态。
我正在编写一个脚本,它将在不同的服务器上自动执行命令,我正在尝试记录它的所有内容和输出。我在重定向和命令状态输出方面遇到困难。意思是命令成功了,它的输出是什么?
我尝试了很多方向,例如将命令输出重定向到函数或文件。我试过一个简单的 if 语句。两人都为那里的受人尊敬的职能工作。但是当我试图将它们结合起来时,脚本总是 return 命令成功。在某种程度上它是。
#!/bin/bash
function Executing(){
if [ "" != "" ]; then
if [ $DEBUG = "true" ]; then
echo "" | Debug i s
if 2>&1 | Debug o o;then
echo "" | Debug s r
else
echo "" | Debug e r
fi
else
eval
fi
fi
}
Executing "apt-get update"
另请注意,系统需要 sudo 才能执行 apt-get update。因此脚本应该报告并记录错误。现在,每当我调用 Executing 函数时,函数 return 都会成功执行。我很确定它确实如此,因为添加的管道 | debug o o
捕获输出并对其进行格式化。我稍后会重定向到日志文件。
所以我测试了 if apt-get update;then echo yes;else echo no; fi
它在我的终端上工作。但是一旦我将输出通过管道传递给调试函数,if 语句 returns true.
试试 set -o pipefail
。
查看手册:The Set Builtin
通常,bash returns 管道组的最后一个命令的退出代码,因此您的 Debug
命令是被检查的命令。使用该设置,bash returns 最后一个(最右边的)命令以非零状态退出的退出状态。如果您的命令失败,这就是传播的状态。