如何使用 grep 的 return 状态值?
How to use return status value for grep?
为什么我的命令没有返回“0”?
grep 'Unable' check_error_output.txt && echo $? | tail -1
如果我删除 'echo $?' 并使用 tail 获取 check_error_output.txt 中最后一次出现的 'Unable',它会 returns 正确。如果我删除尾部 -1,或将其替换为 && it returns 预期的管道。
我错过了什么?
我通过在 grep 和 $?
(grep 'Unable' check_error_output.txt && echo $?) | tail -1
使用进程替换:
cat <(grep 'Unable' check_error_output.txt) <(echo $?) | tail -1
以下方法可以在不使用管道或子 shell 的情况下实现您想做的事情
grep -q 'Unable' check_error_output.txt && echo $?
-q 标志代表安静/无声
来自手册页:
Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. Also
see the -s or --no-messages option. (-q is specified by POSIX.)
这仍然不是故障安全,因为 "No such file or directory" 错误仍然会出现。
我建议采用以下方法,因为它会输出任一类型的 return 值:
grep -q 'Unable' check_error_output.txt 2> /dev/null; echo $?
主要区别是无论失败还是成功,您仍然会得到 return 代码,错误消息将被定向到 /dev/null。注意我如何使用“;”而不是“&&”,使其回显任一类型的 return 值。
检查 if 语句中任何命令的 return 值的最简单方法是:if cmd; then
。例如:
if grep -q 'Unable' check_error_output.txt; then ...
为什么我的命令没有返回“0”?
grep 'Unable' check_error_output.txt && echo $? | tail -1
如果我删除 'echo $?' 并使用 tail 获取 check_error_output.txt 中最后一次出现的 'Unable',它会 returns 正确。如果我删除尾部 -1,或将其替换为 && it returns 预期的管道。
我错过了什么?
我通过在 grep 和 $?
(grep 'Unable' check_error_output.txt && echo $?) | tail -1
使用进程替换:
cat <(grep 'Unable' check_error_output.txt) <(echo $?) | tail -1
以下方法可以在不使用管道或子 shell 的情况下实现您想做的事情
grep -q 'Unable' check_error_output.txt && echo $?
-q 标志代表安静/无声
来自手册页:
Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. Also see the -s or --no-messages option. (-q is specified by POSIX.)
这仍然不是故障安全,因为 "No such file or directory" 错误仍然会出现。
我建议采用以下方法,因为它会输出任一类型的 return 值:
grep -q 'Unable' check_error_output.txt 2> /dev/null; echo $?
主要区别是无论失败还是成功,您仍然会得到 return 代码,错误消息将被定向到 /dev/null。注意我如何使用“;”而不是“&&”,使其回显任一类型的 return 值。
检查 if 语句中任何命令的 return 值的最简单方法是:if cmd; then
。例如:
if grep -q 'Unable' check_error_output.txt; then ...