3

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

Цель: возможно ли запустить скрипт, требующий ввода, путем передачи ввода из другого терминала или скрипта.

Программное обеспечение для оценки загружает много данных перед тем, как быть готовым к обработке, поэтому я бы предпочел, чтобы программное обеспечение работало и время от времени просто передавало данные. Вместо запуска программного обеспечения и загрузки всех необходимых данных (что занимает много времени).

Я могу упомянуть, что я попытался найти tty :
$ /dev/pts/19
затем через другой терминал выполните: $ <command> <myinput> > /dev/pts/19
где команда заменена на 'echo / print'
Тем не менее, он просто печатает в другом терминале, он не действует как входные данные для программного обеспечения.

1 ответ1

2

Создайте именованный канал:

mkfifo pipe

Убедитесь, что он не закроется (см. Этот ответ):

exec 3<>pipe

Подать ваш сценарий из трубы:

<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)

Затем из другого терминала используйте echo , printf или что-то еще:

echo "/some/path/or/another/input" > pipe

или же

cat large_input.txt > pipe

или же

script_that_generates_input.sh > pipe

Но остерегайтесь состояния гонки! Не кормите трубу из двух или более источников одновременно; всегда ждите выхода текущей команды подачи, прежде чем запускать следующую. Обратите внимание, что если один источник передает много данных, он может удерживаться на полпути, пока принимающая сторона не обработает данные. Поместите mbuffer (с аргументами, подходящими для вашего случая использования) перед your_script.sh чтобы создать буфер, который может хранить больше входящих данных, прежде чем любая команда подачи будет приостановлена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .