gpt4 book ai didi

linux - Bash 脚本未检测到失败的退出代码

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:07:18 24 4
gpt4 key购买 nike

我无法让我的 bash 脚本(日志文件)检测除 0 以外的任何其他退出代码,因此失败命令的计数不会增加,但无论命令是否失败,成功次数都会增加成功了。

代码如下:

#!/bin/bash
#Script for Homework 8
#Created by Greg Kendall on 5/10/2016
file=$$.cmd
signal() {
rm -f $file
echo
echo "User Aborted by Control-C"
exit
}
trap signal 2
i=0
success=0
fail=0
commands=0
read -p "$(pwd)$" "command"
while [ "$command" != 'exit' ]
do
$command
((i++))
echo $i: "$command" >> $file
if [ "$?" -eq 0 ]
then
((success++))
((commands++))
else
((fail++))
((commands++))
fi
read -p "$(pwd)" "command"
done
if [ "$command" == 'exit' ]
then
rm -f $file
echo commands:$commands "(successes:$success, failures:$fail)"
fi

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

那是因为 echo $i: "$command" 总是成功的。

退出状态 $?if [ "$?"-eq 0 ] 实际上是 echo 的退出状态,即检查前立即运行的命令。

所以在命令后立即进行测试:

$command
if [ "$?" -eq 0 ]

并在别处使用echo

或者如果您更愿意根本不需要 $? 检查,您可以单独在 if 中运行命令并检查状态:

if $command; then .....; else ....; fi

如果您不想获取 STDOUT 和 STDERR:

if $command &>/dev/null; then .....; else ....; fi

** 请注意,作为 @Charles Duffy mentioned在评论中,you should not run command(s) from variables .

关于linux - Bash 脚本未检测到失败的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151955/

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