Нажмите любую клавишу, чтобы приостановить сценарий оболочки, нажать снова для возобновления

Виртуальная машина позволила бы сценарию записать где угодно, не влияя на хост-систему и осмотреть, где это на самом деле пытается записать в, которые, кажется, цели.

Например, можно легко запустить Дугу Linux с

kvm -boot d -m 512 -cdrom archlinux-*.iso
9
26.11.2014, 11:11
3 ответа

Вам не нужно добавлять что-то в свой скрипт. Оболочка позволяет такую ​​функциональность.

  • Начните свой скрипт в терминале.
  • В то время как работает и блокирует использование терминала Ctrl - Z . Терминал снова освобождается, и вы можете увидеть сообщение о том, что процесс остановлен. (Сейчас в состоянии виргисса T , остановился)
  • Теперь делай все, что вы хотите. Вы также можете начать другие процессы / сценарии и остановить их с помощью Ctrl - Z .
  • Тип задания В терминале или списке все остановленные задания.
  • Чтобы включить ваш скрипт, тип 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
12
27.01.2020, 20:05

, Если вы хотите, просто приостанавливают сценарий, оставаясь в сценарии затем, можно использовать чтение вместо сна.

можно использовать

-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 в конец, чтобы препятствовать тому, чтобы ввод портил экран, произвело

6
27.01.2020, 20:05

С 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
1
27.01.2020, 20:05

Теги

Похожие вопросы