Как отправить текст в процесс в сценарии оболочки? - PullRequest
3 голосов
/ 16 марта 2010

Итак, у меня есть программа для Linux, которая выполняется в цикле while (true), который ожидает ввода данных от пользователя, обрабатывает его и выводит результат в стандартный вывод.

Я хочу написать сценарий оболочки, который открывает эту программу, передает ей строки из txt-файла, по одной строке за раз и сохраняет выходные данные программы для каждой строки в файл.

Итак, я хочу знать, есть ли какая-либо команда для:
- открыть программу
- отправить текст процессу
- получить вывод из этой программы

Большое спасибо.

Ответы [ 3 ]

1 голос
/ 16 марта 2010

Вы смотрели на трубы и перенаправления ? Вы можете использовать каналы для ввода данных из одной программы в другую. Вы можете использовать перенаправление для отправки содержимого файлов в программы и / или записи вывода в файлы.

1 голос
/ 16 марта 2010

Полагаю, вам нужен скрипт, написанный на bash.

  1. Чтобы открыть файл, просто введите его имя.
  2. Чтобы отправить текст в программу, вы можете либо передать его через |, либо с помощью < (получить данные из файла)
  3. Чтобы получить вывод, вы используете > для перенаправления вывода в какой-либо файл или >> для перенаправления, но добавляете результаты вместо усечения файла

Чтобы достичь того, чего вы хотите в bash, вы можете написать:

#/bin/bash

cat input_file | xargs -l1 -i{} your_program {} >> output_file

Это вызывает your_program для каждой строки из input_file и добавляет результаты к output_file

1 голос
/ 16 марта 2010

Звучит так, будто вы хотите что-то вроде этого:

cat file | while read line; do
    answer=$(echo "$line" | prog)
done

Будет запущен новый экземпляр prog для каждой строки. Строка будет стандартным вводом prog, а вывод будет помещен в переменную answer для дальнейшей обработки сценарием.

Некоторые люди возражают против "кошачьего файла |" поскольку это создает процесс, в котором он вам действительно не нужен. Вы также можете использовать перенаправление файлов, поставив его после done:

while read line; do
    answer=$(echo "$line" | prog)
done < file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...