Я хочу создать скрипт:
command_1
command_2
...
command_n
restart
command_n+1
command_n+2
...
command_m
Это возможно в bash?
В этом случае вы создаете файл, в котором храните свою последнюю команду. И создайте скрипт, который проверяет, существует ли файл и содержит ли он строку. Если это так, последний раз ваш скрипт запускался и он должен завершиться.
Если файл не существует или пуст, не делайте ничего. Когда файл содержит команду, запустите следующую команду.
# Determine if last_command.txt exists
if [ -f last_command.txt ]; then
# Extract the last line out of the file
last_command=$(head -n 1 last_command.txt)
# Check if last_command is set, that is the next command has to be executed.
if [ ! -z $last_command ]; then
# Excecute the next command.
fi
else
# Do nothing.
fi
Поместите следующую строку перед командой перезагрузки.
# Writes <Last command> to last_command.txt. Care for proper permissions!
echo "<Last command>" > last_command.txt
reboot
Я создаю два файла: script_before_reboot
и script_after_reboot
script_before_reboot
:
#!/bin/bash
cale=`dirname $0`
sudo update-rc.d -f script_after_reboot remove
cp $cale"/script_after_reboot" /etc/init.d/
sudo chmod +x /etc/init.d/script_after_reboot
sudo update-rc.d script_after_reboot defaults 90
sudo rm /etc/rc0.d/K90script_after_reboot
sudo rm /etc/rc1.d/K90script_after_reboot
sudo rm /etc/rc3.d/S90script_after_reboot
sudo rm /etc/rc4.d/S90script_after_reboot
sudo rm /etc/rc5.d/S90script_after_reboot
sudo rm /etc/rc6.d/K90script_after_reboot
command_1
command_2
...
command_n
sudo reboot
script_after_reboot
:
#!/bin/bash
command_1
command_2
...
command_n
sudo update-rc.d -f script_after_reboot remove
# or, if you need another reboot :
# sudo update-rc.d -f script_after_reboot remove && sudo reboot
exit 0
Таким образом script_before_reboot
выполнения с корневыми полномочиями (sudo /path/script_before_reboot
). После перезагружают сценарий script_after_reboot
выполнения от его символьной ссылки /etc/rc2.d/script_after_reboot
. После выполнения этот сценарий автоматически удален, вместе с его собственной символьной ссылкой, найденной в /etc/rc2.d
.Это все.