Полная часть справочной страницы Bash, которая применима, только говорит:
Если операционная система, в которой работает bash, поддерживает управление заданиями, bash содержит средства для ее использования. Ввод символа приостановки (обычно ^ Z, Control-Z) во время выполнения процесса вызывает остановку этого процесса и возвращает управление в bash. При вводе символа отложенного приостановления (обычно ^ Y, Control-Y) процесс останавливается, когда он пытается прочитать ввод с терминала, и управление возвращается в bash. Затем пользователь может манипулировать состоянием этого задания, используя
bg
команду, чтобы продолжить его в фоновом режиме,fg
команда, чтобы продолжить это на переднем плане, или команда kill, чтобы убить это. ^ Z вступает в силу немедленно, и имеет дополнительный побочный эффект, приводящий к тому, что ожидающий вывод и typeahead отбрасываются.
Я никогда не использовал Ctrl- Y; Я только что узнал об этом. Я сделал хорошо с Ctrl- Z(приостановить) только.
Я пытаюсь представить себе , что этот вариант для . Когда это будет полезно?
(Обратите внимание, что эта функция существует не во всех вариантах Unix. Она присутствует в Solaris и FreeBSD, но не в Linux. Соответствующая настройка есть stty dsusp
.)
Возможно , менее субъективно: Есть ли что - нибудь , что может быть достигнуто с Ctrl- Yчто не может быть достигнуто так же легко с Ctrl- Z?
источник
stty dsusp
, мне не удалось заставить его отправлять SIGTSTP при ^ Y (я это делал в Solaris). У тебя есть?Ответы:
Из руководства 4BSD для csh :
Таким образом, цель состоит в том, чтобы набрать несколько входных данных во время обработки первого и завершить работу после их завершения.
источник
^Y
будет прочитан успешно, а затем , когда^Y
ударил процесс будет остановлен. Я читаю это правильно?^Y
, даже если вы отреклись от процесса и закрыли свой терминал до возобновления процесса. Правильно? ( «... после возобновления он получает данные до ^ Y». Это то, что я имел в виду; я обычно не имею дело с кодом C). :)Скажем, есть цикл чтения ввода и выполнения. Может быть полезно позволить задаче завершить текущую инструкцию, которую она вычисляет, не прерывая ее, прежде чем она вернется в командную строку для новой. Таким образом, чтобы закончить цикл. Это корректно завершает цикл и предотвращает его повторный запуск, если
read
время ожидания истекло.источник
^Z
его потом .Я могу вспомнить один сценарий, в котором он может быть полезен, но это что-то вроде надуманного краевого случая.
Предположим, вы отлаживаете скрипт, который записывает временные файлы, которые вы хотите проанализировать, прежде чем они будут удалены, как часть процедуры очистки.
Вы можете добавить
read foo
куда-нибудь после того, как файлы будут записаны (но до очистки), запустить скрипт и нажать Ctrl- по Yмере их генерации. После этого вы перейдете к приглашению со сценарием, приостановленным в фоновом режиме, чтобы сделать все, что вам нужно, и сможетеfg
разрешить выполнение сценария.источник
^Z
. Другими словами: после того, как вы введете текст,fg
вам все равно придется дать сценарию какой-то ввод, прежде чем он продолжится. Отсюда мой вопрос; Я до сих пор не вижу смысла^Y
. (Спасибо за ответ, хотя!) :)Единственный сценарий, который я могу придумать (и даже я не нахожу его очень убедительным), это если вы хотите использовать какой-нибудь упреждающий ввод для команды оболочки. Допустим, запущена какая-то команда, которая будет читать ввод в будущем. Затем вы можете ^ Y это, а затем сразу же введите следующую команду оболочки, которую вы хотите выполнить, когда запущенная команда приостанавливается. Я не думаю, что когда-либо действительно использовал это в течение нескольких десятилетий использования BSD Unix.
источник