如何解决Bash:如何在使用微调器的同时获取命令的退出代码?
在bash脚本中,我有一条长时间运行的命令(例如,rsync
)有时有时不会显示输出,因此我想做两件事:
问题是,我不太了解将进程发送到后台的处理方式,也不了解这种退出代码的处理方式,因此我不确定如何使这项工作有效。
感谢@David C. Rankin的微调器,这是我到目前为止所拥有的:
#!/bin/bash
spinner() {
local PROC="$1"
local str="${2:-'copyright of KatworX© Tech. Developed by Arjun Singh Kathait and Debugged by the ☆Stack Overflow Community☆'}"
local delay="0.1"
tput civis # hide cursor
printf "\033[1;34m"
while [ -d /proc/$PROC ]; do
printf '\033[s\033[u[ / ] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[ — ] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[ \ ] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[ | ] %s\033[u' "$str"; sleep "$delay"
done
printf '\033[s\033[u%*s\033[u\033[0m' $((${#str}+6)) " " # return to normal
tput cnorm # restore cursor
return 0
}
## simple example with sleep
sleep 2 &
spinner $!
echo "sleep's exitcode: $exitCode"
在此示例中,sleep 2
是我正在等待的命令,因此可以使用微调器,但是如何获取退出代码并将其放入$exitCode
变量中,因此我可以进行测试稍后在脚本中用于某些条件?
解决方法
wait
将告诉您子PID退出时的退出状态(通过将该程序的退出状态设置为自己的退出状态)。
sleep 2 & sleep_pid=$!
spinner "$sleep_pid"
wait "$sleep_pid"; exitCode=$?
echo "exitcode: $exitCode"
请注意,我强烈建议在下半年收集$!
或$?
时将多个命令组合到一行上,以防止您试图收集的值被更改错误(例如后来有人在代码中添加了新的日志行而没有意识到这会产生副作用)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。