gpt4 book ai didi

shell - 如果文件输出一些错误,则引发错误(不引发 shell 错误)

转载 作者:行者123 更新时间:2023-12-03 08:43:00 24 4
gpt4 key购买 nike

如果可执行文件输出某些特定内容(例如“错误”),我想提出一个错误:
echo "abcdef" | [[ "$(grep "f")" != "" ]] && echo "error"

"error"


echo "abcdef" | [[ "$(grep "g")" != "" ]] && echo "error"

""



这项工作,但是将其应用于exe时会失败
test_if_exe_fails(){
$1 | [[ "$(grep "$2")" != "" ]] && echo "error: $2" && exit 1
}

运行 myApp.exe | test_if_exe_fails "myerror message"时退出

line xxx: myerror : command not found



所以我尝试使用 this method但仍然无法正常工作

假设我的exe输出以“BLA BLA FOO”开头,如果我这样做的话:
test_if_exe_fails "$(myApp.exe)" "myerror message"
它给 :

line xxx: BLA : command not found



更多示例:

1/ test_if_exe_fails "$(echo 'hello')" "hola"

line xx: hello: command not found



2/ test_if_exe_fails "$(echo 'hello')" "hello"

line xx: hello: command not found

最佳答案

[[ ... ]]的目的是生成if&&||可以测试的退出代码。 grep已经做到了。您不需要关心grep的输出,可以使用-q选项取消显示。

echo "abcdef" | grep -q "f" && echo "error"

请注意,您的函数正在包装管道,但是您删除了 echo命令。您需要放回去。 (实际上,您应该使用 printf而不是 echo来实现可移植性和可预测性。最后,错误消息应写入标准错误,而不是标准输出。
test_if_exe_fails(){
print '%s' "$1" | grep -q "$2" && echo "error: $2" >&2 && exit 1
}

test_if_exe_fails "$(myApp.exe)" "myerror message"

最后一项改进:与其捕获 myApp.exe的输出,不如直接将其通过管道传递给该函数:
test_if_exe_fails(){
grep -q "$1" && echo "error: $1" >&2 && exit 1
}

myApp.exe | test_if_exe_fails "myerror message"

关于shell - 如果文件输出一些错误,则引发错误(不引发 shell 错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59987716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com