Хоча попередні відповіді тут усі задовольняють вимогу до досконалості, ви також можете вимкнути живлення машини, як тільки завдання будуть виконані.
bashСценарії можуть бути trapпед, тобто певні сигнали можуть бути перехоплені і певні завдання можуть виконуватися за потреби.EXITє одним із сигналів, який може бути захоплений.
Ви зможете:
- Встановіть
trapдля EXITсвоїх автоматизованих скриптів оболонки, що означає припинення автоматизованих завдань
- Встановіть
trapсвій .bashrc EXIT, тобто кожен раз, коли виходите з цієї машини, вимикайте його.
Варіант №1 був би ідеальним випадком, за умови, що для ваших завдань не потрібна перевірка adhoc та ручне судження.
Варіант №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(разове виконання).