Как заставить службу (bash-скрипт) считывать данные из stdin (попросите меня ввести что-нибудь) во время выполнения скрипта?

#linux #bash #systemd

#linux #bash #systemd

Вопрос:

Я создал службу с systemd, которая использует wendy (инструмент замены inotify) для прослушивания каталога и запуска bash-скрипта, когда что-то меняется.

однако мой скрипт использует stdin в определенное время для чтения переменной. но когда служба запускается, она полностью пропускает запрос ввода в терминале и переходит к остальной части скрипта bash.

я новичок в systemd и службах, могу ли я в любом случае заставить его запрашивать у меня ввод?

это то, что произошло из /var/log/ syslog

7 октября 21:52:09 сервер wendy.sh [13062]: был добавлен в скрипты.

7 октября 21:52:09 сервер wendy.sh [13062]: введите имя скрипта: (/home/user/scripts/blah.sh )

7 октября 21:52:09 сервер wendy.sh [13062]: chmod: пропущенный операнд после x

7 октября 21:52:09 сервер wendy.sh [13062]: Попробуйте ‘chmod —help’ для получения дополнительной информации.

предполагалось, что он должен был запросить у меня имя скрипта для передачи в chmod.

Как это сделать?

Спасибо

Комментарии:

1. 1) Рассмотрим поведение read v </dev/null . 2) Спросите себя, как служба должна знать, какой из многих /dev/tty* , /dev/pts/* , графических интерфейсов и т. Д. Он должен использовать для ввода.

Ответ №1:

К сожалению, очень сложно запросить ввод данных пользователем в скрипте, работающем в качестве фоновой задачи, потому что у них нет подключенного терминала. Я бы посоветовал вам попытаться найти альтернативу чтению входных данных из stdin.

Если вы действительно хотите этого добиться, вы могли бы, например, запустить где-нибудь программу, которая будет прослушивать сокет UNIX, и ваш автоматизированный скрипт мог бы связаться с этим клиентом, чтобы запросить ввод (например, this Stack Exchange post ).).

В netcat-openbsd есть опция -U. Если у вас его нет, у вас, вероятно, вместо него установлен netcat-traditional; Я бы посоветовал переключиться.

Пример команды: nc -U /var/run/socket