Там какой-либо путь состоит в том, чтобы выйти, “меньше” следуют за режимом, не останавливая другие процессы в канале?

Используйте сценарий запуска сессии входа в систему ~/.xprofile создать некоторый файл флага для Вас. Будьте этим ~/.xlogin_flag, затем в Вашем другом использовании сценария inotifywatch от пакета inotify-tools видеть, что он создан, затронутый или удален.

5
01.08.2017, 15:01
4 ответа

работает хорошо для меня, когда Глядя на файл, который прилагается, но не когда вход происходит из трубы (используя команду f - Control-C работает нормально).

См. Обсуждение в Следуйте за трубкой, используя меньше? - это известная ошибка / недостатка в меньше .

5
27.01.2020, 20:37

Is there any way to exit “less” follow mode without ^C?

Да, , начиная с версии 569, можно выйти из режима отслеживания с помощью CTRL + X , что не останавливает другие процессы в канале.

Для более ранних версий less (с поддержкой только CTRL + C)можно настроить так, чтобы сигнал SIGINT, отправляемый при нажатии CTRL + C не влияет на другие процессы в канале, что позволяет им продолжать работу. Этого можно добиться, выполнив любое из следующих действий:

  • предотвращение доступа SIGINT к другим процессам в канале путем перемещения этих процессов в отдельную группу процессов с помощью утилиты setsid :

(setsid seq 10000000) | less +F

  • обработка(перехват)SIGINT, чтобы он не доставлялся другим процессам в канале:

(trap '' INT; seq 10000000) | less +F

  • с использованием подстановки процессов (несовместимая с POSIX функция, реализованная в Bash, Zsh и Ksh, но не в, например,. Тире):

less -f +F <(seq 10000000)

(seq 10000000 &) | less +F

Для наблюдения за влиянием вышеперечисленных команд на группы процессов и обработку сигналов я предлагаю использовать команду ps -O ppid,pgrp,sid,ignored --forest -C bash,less,seqв отдельном терминале.

6
27.01.2020, 20:37
( your_input_pipeline & ) | less +F

и

{ your_input_pipeline & } | less +F

, кажется, работает в Bash. Это также работает в Zsh и Dash, за исключением того, что сигнал INT распространяется на вмещающую оболочку после выхода less. Не работает в Кш.

Тестовая конфигурация:

GNU bash 5.0.17
dash 0.5.10.2-6 (package version in Ubuntu Linux)
zsh 5.8
less 551
1
21.11.2020, 22:12

Возможно, самый простой ответ:

trap '' INT
your_input_pipeline | less +F
# you may want to restore or define new INT trap here
echo still in the shell

Это также предотвращает прерывание внешней оболочки, что может произойти с другими ответами, если оболочка не Bash.

1
26.11.2020, 21:13

Теги

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