Команда выхода не может выйти из оболочки bash после отображения служебной информации?

Такой простой bash-скрипт, который содержит всего две строки.

cat show.sh
systemctl status cron
exit  0 

Выполнил его с рутом в терминале.

bash  show.sh

Вся информация о cron.service отображается на терминале.

cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: ena
   Active: active (running) since Sat 2019-08-10 06:51:18 EDT; 13h ago
     Docs: man:cron(8)

Почему show.sh не находится в статусе выхода, чтобы добавить щелчок по q, произойдет выход из show.sh, почему exit 0 не выполняется? как его вызвать?
Мое ожидание: показать информацию о cron.service на терминале и выйти из шоу .sh script.
Наполовину сделано для моего show.sh, просто покажите информацию о cron.service на терминале.
Имеет смысл, что длинный скрипт автоматизирует работу, две приведенные выше строки — последний шаг, чтобы показать статус всего скрипта.


person showkey    schedule 11.08.2019    source источник
comment
exit не запускается, пока не завершится systemctl. Если systemctl status cron ждет, пока вы нажмете q, то вот вам и ответ.   -  person Charles Duffy    schedule 11.08.2019
comment
... если вы не хотите, чтобы systemctl делал это, я бы предложил изменить его настройки, чтобы больше не запускать пейджер.   -  person Charles Duffy    schedule 11.08.2019
comment
Кстати, я бы предложил убрать строку exit 0. Если у вас его нет, сценарий завершает работу со статусом последней запущенной им команды (то есть поведением по умолчанию является echo "$?"), что полезно: он проходит через статус выхода systemctl, поэтому вызывающая сторона вашего сценария знает, что результат.   -  person Charles Duffy    schedule 11.08.2019
comment
(э-э, я имел в виду exit "$?", а не echo "$?", конечно).   -  person Charles Duffy    schedule 29.04.2020


Ответы (1)


Передайте --no-pager в systemctl следующим образом:

systemctl --no-pager status cron

В противном случае systemctl запускает less (или подобную ей программу), которая не завершается до тех пор, пока не будет нажата q; следовательно, управление не передается напрямую вашему сценарию.


См. соответствующий вопрос на нашем родственном сайте Unix и Linux по адресу Могу ли я запретить service foo status подкачивать свои выходные данные через less?

person Charles Duffy    schedule 11.08.2019