Можно ли сохранить последовательность команд после отправки ctrl + c на промежуточном этапе?

У меня есть программа, давайте назовем ее xcommand . когда он запущен, он не имеет stdout, но он записывает свой вывод в файл.

То, что я хочу достичь, выглядит следующим образом: после запуска xcommand во время его запуска я хочу видеть его вывод в реальном времени, и если бы я нашел что-то ненормальное, я затем выключил вывод и в то же время вернул xcommand ,

Я пробовал несколько способов, например, в сценарии bash, который я пишу

 xcommand & tail -f outputfile fg 

Однако проблема в том, что, как только я ctrl+c , все дело останавливается. И fg не работает вообще.

Так можно ли достичь того, чего я хочу?

  • Как найти рабочую среду GUI из терминала?
  • копировать файлы удаленно на одном пути
  • Команда запуска / остановки в терминале без вмешательства человека?
  • Что такое инструмент, который позволяет мне задавать произвольные каталоги, используя **
  • Как улучшить bash-скриптинг от 1 длинной линии до лучшего метода?
  • Создавайте shorcuts в терминале для перемещения между папками
  • синтаксис ls -hide = и ls -ignore =
  • Как передать каталог с экранированным пространством в переменную?
  • 2 Solutions collect form web for “Можно ли сохранить последовательность команд после отправки ctrl + c на промежуточном этапе?”

    Когда неинтерактивные (как в скриптах), оболочки не выполняют контроль над заданиями. Они не ставят асинхронные задания в фоновом режиме. Они остаются в той же группе процессов, что и остальная часть скрипта, поэтому Ctrl-C вызовет отправку SIGINT (при условии, что сам сценарий запущен на переднем плане).

    Вы можете выдать set -m для оболочки, чтобы выполнять контроль заданий, когда они не интерактивны:

     #! /bin/bash - set -m xcommand & # start as a background job, so won't receive SIGINT upon ^C tail -f outputfile # start in foreground. Will receive SIGINT. fg # bring the xcommand job in foreground and wait for it. Will receive SIGINT 

    Чтобы это сработало, этот сценарий должен быть запущен на переднем плане. Также будьте осторожны, если вы нажмете Ctrl-Z или если фоновая работа попытается прочитать с терминала, у вас возникнут проблемы.

    По моему опыту, этот трюк только «работает» в bash или yash , как правило, не в других Bourne-подобных оболочках.

    Если вы запустите свою программу в фоновом режиме с помощью

     xcommand & 

    нажатие Ctrl + C в оболочке не остановит его.

    Если вы это сделаете

     tail -f outputfile 

    и нажмите Ctrl + C , только процесс tail будет завершен.

    Если вы это сделаете

     fg 

    вы поместите xcommand на передний план. Теперь нажатие Ctrl + C завершит процесс xcommand .

    Итак, не ставьте xcommand процесс на передний план, или, если хотите, нажмите Ctrl + Z и выполните bg чтобы вернуть его обратно в фоновый режим.

    Interesting Posts

    LFS 7.10 – почему я получаю сообщение об ошибке при использовании команды make для expect-5.45

    Тест существования файла Bash всегда верен

    USB-установка Linux Mint – отображается только как один раздел, но у меня закончилось свободное пространство

    сосна (Alpine) с включенной аутентификацией GMail с двумя шагами?

    VMware: «SG_IO: плохие / отсутствующие данные ощущений» на новом виртуальном диске SCSI

    Полный клон зашифрованного диска, не загружаемый на других компьютерах

    Как настроить пространство подкачки после установки системы?

    Как выбрать определенные наборы или вытеснить из файла, если struture содержит определенную строку?

    Wget не конвертирует ссылки и загружается правильно?

    Найти шаблон из одного файла, указанного в другом

    Какой светлый дистрибутив Linux позволяет подключаться через RDP с экрана входа в систему

    Как изменить команду ci в vim

    cygwin: ls -i сообщает неправильный номер inode для файлов в UNC-пути

    Как я могу отличить алгоритм шифрования от htpasswd?

    Файловая система, совместимая со всеми ОС?

    Linux и Unix - лучшая ОС в мире.