Я следую этой схеме приостановки задачи, а затем позволяю ей продолжаться слишком часто в Ctrl-Z bgпоследовательности.
Мне было интересно, есть ли способ сжать это до одного нажатия клавиши?
Моя оболочка zsh
linux
keyboard-shortcuts
shell
zsh
Евгений Долженко
источник
источник
Ответы:
Последовательность Ctrl+ Zобрабатывается терминалом, а не оболочкой. (Полезный фон: какова точная разница между терминалом, оболочкой, tty и консолью? )
Только небольшой нерасширяемый набор функций может быть связан с ключом в терминале . Вы можете настроить ключи, привязанные к этим функциям, но не добавлять другую функцию. Эти функции делятся на три категории:
eof
, Ctrl+ D), конец строки (eol
, Ctrl+ M), удалить символ слева (erase
, Ctrl+ H), удалить слово слева (werase
, Ctrl+ W), удалить строку (kill
, Ctrl+ U).stop
( Ctrl+ S),start
( Ctrl+ Q). Полезно только на старых последовательных терминалах, которые пропускали символы, когда терминал не мог угнаться за компьютером или наоборот.intr
, Ctrl+ C), принудительное завершение (quit
, Ctrl+ \), приостановка ( Ctrl+ Z).Некоторые системы, в том числе Linux, расширяют этот список, но я никогда не видел ни одной, включающей фоновую обработку. Обратите внимание, что он будет поддерживаться как в драйвере терминала в ядре, так и в эмуляторе терминала. Таким образом, вы должны обойтись с suspend, который отправляет на передний план сигнал SIGTSTP . Это запускает SIGCHLD в родительском процессе лидера приоритетного задания, которым обычно является оболочка. Когда оболочка получила SIGCHLD, она звонит,
waitpid
чтобы выяснить, почему она была уведомлена, и, обнаружив, что фоновое задание было приостановлено, отображает уведомление (например[1] + 12345 suspended mycommand
) и новое приглашение.Вы можете запрограммировать оболочку для отправки
SIGCONT
сигнала на задание переднего плана. Я не думаю, что у zsh есть ловушка для этого, вам нужно будет исправить исходный код. И у zsh нет никакого способа узнать, действительно ли вы хотели прервать программу (упс, эта программа может делать что-то не то, позвольте мне приостановить ее, пока я разбираюсь) или справиться с ней.Что я делаю, это чтобы установить Ctrl+Z задаю последовательность клавиш в zsh для фонового изображения текущего задания (
%%
). Таким образом, я могу отправить задний план на задний план, нажав Ctrl+ Z Ctrl+ Z. Пока я в этом, я заставляю Ctrl+ Zделать что-то еще полезное, когда текущая строка ввода не пуста (поэтому я не просто вернулся из подпроцесса): «приостановить» текущую строку ввода, что позволяет мне набрать другую команду после чего прерванная строка помещается обратно во входной буфер.источник
^ z ^ z, как zsh выше, возможно в bash, хотя это немного глупо, и я долго не запускал это:
"\C-z": "bg\n"
поэтому ^ z для приостановки включается при запуске команды, а затем отключается для приглашения bash.
источник
Так что нашел решение, не совсем то, что я хочу, но чертовски близко отсюда /superuser//a/161922/35223
источник
Ctrl+Z
вызывающейbg
, я не уверен в обнаружении непустой строки ввода).Являются ли эти команды, которые вы хотели сначала выполнить на переднем плане, а затем переключиться на фон? Я не знаю, есть ли более простой способ сделать это. Но если вы хотите запустить команды, которые будут в фоновом режиме, вы можете просто добавить амперсанд в конец строки. например,
ping google.com &
начнется пинг в фоновом режиме; вы не сможете взаимодействовать с ним, если не наберетеfg
.источник