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

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

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

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

 xcommand & tail -f outputfile fg 

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

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

  • Есть ли стандартная команда, которая всегда выходит с ошибкой?
  • Инструмент командной строки для проверки того, когда был обновлен URL-адрес?
  • Как удалить строку с эхом?
  • Есть ли способ отменить команду терминала?
  • Почему не работает wget url / mediafile.ext> medafile2.ext?
  • Веб-браузер командной строки с проверкой подлинности Kerberos?
  • Как запустить полную проверку SSD-диска командой `fsck` при перезагрузке системы (Debian)?
  • Просмотр процесса переднего плана с использованием ps
  • 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 чтобы вернуть его обратно в фоновый режим.

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