Виртуальная машина позволила бы сценарию записать где угодно, не влияя на хост-систему и осмотреть, где это на самом деле пытается записать в, которые, кажется, цели.
Например, можно легко запустить Дугу Linux с
kvm -boot d -m 512 -cdrom archlinux-*.iso
Вам не нужно добавлять что-то в свой скрипт. Оболочка позволяет такую функциональность.
T
, остановился) задания
В терминале или списке все остановленные задания. FG
(передний план). Он возобновляет работу обратно в группу процесса переднего плана, и рабочие места продолжаются. См. Пример:
root@host:~$ sleep 10 # sleep for 10 seconds
^Z
[1]+ Stopped sleep 10
root@host:~$ jobs # list all stopped jobs
[1]+ Stopped sleep 10
root@host:~$ fg # continue the job
sleep 10
root@host:~$ # job has finished
, Если вы хотите, просто приостанавливают сценарий, оставаясь в сценарии затем, можно использовать чтение вместо сна.
можно использовать
-t
чтения, чтобы установить тайм-аут для чтения
-n
чтения читать, один символ (эффективно просто нажимают любую клавишу) продолжать сценарий
, Поскольку вы не предоставили кода, ниже пример того, как это могло использоваться.
Если q нажимается затем ,-n1
чтения препятствует тому, чтобы сценарий продолжился, пока клавиша не нажата.
Когда клавиша нажата затем, проверка сбрасывается, и сценарий продолжается в петле как нормальный.
while [[ true ]]; do
read -t2 -n1 check
if [[ $check == "q" ]];then
echo "pressed"
read -n1
check=""
else
echo "not pressed"
fi
echo "Doing Something"
done
можно также добавить stty - эхо
к запуску раздела и , эхо stty
в конец, чтобы препятствовать тому, чтобы ввод портил экран, произвело
С dd
можно надежно считать единственный байт из файла. С stty
можно установить минута
число байтов квалифицировать терминальное чтение и время
через десятые части секунды. Объединить те два, и можно обойтись без сон
полностью, я думаю и просто позволяю тайм-ауту чтения терминала сделать работу для вас:
s=$(stty -g </dev/tty)
(while stty raw -echo isig time 20 min 0;test -z "$(
dd bs=1 count=1 2>/dev/null; stty "$s")" || (exec sh)
do echo "$SECONDS:" do your stuff here maybe
echo no sleep necessary, I think
[ "$((i+=1))" -gt 10 ] && exit
done
) </dev/tty
, Который является небольшим примером в то время как
цикл что я дразнивший за вас для испытания. Каждые две секунды dd
испытывает таймаут на его предпринятом чтении stdin
- перенаправленный от /dev/tty
- и в то время как
циклы цикла. Это или dd
не делает тайм-аут, потому что вы нажимаете клавишу - в этом случае вызывается, интерактивная оболочка.
Вот тестовый прогон - числа, распечатанные во главе каждой строки, являются значением переменной оболочки $SECONDS
:
273315: do your stuff here maybe
no sleep necessary, I think
273317: do your stuff here maybe
no sleep necessary, I think
273319: do your stuff here maybe
no sleep necessary, I think
273321: do your stuff here maybe
no sleep necessary, I think
sh-4.3$ : if you press a key you get an interactive shell
sh-4.3$ : this example loop quits after ten iterations
sh-4.3$ : or if this shell exits with a non-zero exit status
sh-4.3$ : and speaking of which, to do so you just...
sh-4.3$ exit
exit
273385: do your stuff here maybe
no sleep necessary, I think
273387: do your stuff here maybe
no sleep necessary, I think
273389: do your stuff here maybe
no sleep necessary, I think
273391: do your stuff here maybe
no sleep necessary, I think
273393: do your stuff here maybe
no sleep necessary, I think
273395: do your stuff here maybe
no sleep necessary, I think
273397: do your stuff here maybe
no sleep necessary, I think