shell脚本退不出
时间: 2023-09-09 18:09:31 浏览: 147
根据提供的引用内容,问题中的shell脚本在读取到行值为2时退出了子进程,并捕捉到了退出码。子进程结束后,后面的程序也没有执行。这是预期的结果。但问题是脚本无法退出。
根据引用中的脚本代码,我们可以看到在退出子进程后,使用了条件判断来判断退出码是否为1,如果是1则继续退出脚本。但在这里我们需要注意的是,每次使用`$?`来获取上一个命令的退出码时,都会被刷新为最新的命令退出码。所以在条件判断中多次使用`$?`可能会导致不准确的结果。
为了解决这个问题,我们可以将子进程的退出码保存到一个变量中,然后在后续的条件判断中使用这个变量来避免`$?`被刷新的问题。
以下是一个修改后的示例脚本:
```shell
from cat ./data.txt | while read line
do
echo "================最开始============"
echo "$BASHPID"
echo "===================================="
echo "${line}"
cat ./data.txt | while read line
do
echo "================进入管道后============"
echo "$BASHPID"
echo "===================================="
echo "${line}"
if [ ${line} -eq 2 ]; then
exit_code=1
echo "未退出"
fi
echo "返回值"
echo "$exit_code"
echo "返回值"
if [ $exit_code -eq 1 ]; then
echo "导入失败退出1!"
exit 1
fi
done
#===这里不要加语句,否则返回值可能会在这里被改变===
if [ $exit_code -eq 1 ]; then
echo "导入失败退出2!"
exit 1
fi
echo "================出循环后============"
echo "$BASHPID"
echo "===================================="
echo "$?"
if [ $exit_code -eq 1 ]; then
echo "导入失败退出3!"
exit 1
fi
if [[ $exit_code -eq 1 ]]; then
echo "导入失败退出4!"
exit 1
fi
done
```
这样修改后的脚本将子进程退出码保存在变量`exit_code`中,并在后续的条件判断中使用该变量。这样就避免了使用`$?`时的刷新问题,可以正确判断退出码并退出脚本。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [shell exit 1退不出问题](https://blog.csdn.net/gegeyanxin/article/details/124152819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [shell编程 创建shell脚本 shell 基础语法 shell流程控制语法 shell函数](https://download.csdn.net/download/weixin_66328465/87212912)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文