尽管此处的先前答案都满足完善的要求,但是您也可以在完成任务后立即关闭机器电源。
bash
可以对脚本执行trap
ping操作,这意味着可以截获某些信号,并可以在需要时执行某些任务。EXIT
是可以捕获的信号之一。
您将能够:
trap
为EXIT
您的自动化shell脚本设置一个,这意味着您终止了自动化任务
trap
为您的设置a .bashrc
EXIT
,这意味着每当您注销该计算机时,请关闭电源。
如果您的任务不需要即席检查和手动判断,则选项#1是理想的情况。
选项#2涵盖了您在不关闭电源的情况下忘记退出终端的情况。但是有一个警告。如果同一台机器上有多个终端打开,并且从其中一个终端退出,它仍将关闭机器的所有电源。(可以编写脚本来避免这种情况,但是我不会使解决方案复杂化。)
cleanup(){
# Do some tasks before terminating
echo oh la la, cleaning is so nice
echo "See you later, world"
sudo poweroff & # finally shutdown
}
trap cleanup EXIT
这可以在.bashrc
选项#2 的结尾处,也可以在脚本中选项#1的顶部某处。
为什么不在poweroff
脚本末尾使用?
我更喜欢set -eo pipefail
在脚本顶部使用。如果发生任何错误,它不会自动失败。它将停止执行更多命令。trap
的EXIT
信号应当覆盖脚本过早终止由于错误的案件。
但是,对于您的任务,这也可能意味着机器将在完成之前关闭。
我有一个简单的bash
模板,可以使脚本更易于调试。也许可能有用。请看这个要点。
at
(一次性执行)。