Как бы вы справились с ситуацией, требующей ввода, желанием увидеть вывод, а также желанием записать файл в bash? - PullRequest
2 голосов
/ 23 октября 2019

Скажем, у меня есть случайный исполняемый файл с именем prog. Это может быть, например, cat.

. Теперь я делаю в CLI следующее:

  1. ./prog
  2. Программа теперь ожидает ввода
  3. Я ввожу некоторые данные
  4. Программа возвращает мне некоторые данные.
  5. Я заканчиваю нажатием CD

Наконец, у нас есть что-то похожее на:

herophant:~/working/dir$ ./prog
input
output
input2
output2
<C-D>

Теперь я все еще хочу увидеть то же самое, что и выше, но я хочу записать ввод в некоторый файл, такой как test.in, поэтому в концевсе это, я в конечном итоге с test.in. (И, возможно, если я захочу, test.out)

Могу ли я сделать все это, не беспокоясь о написании сценария bash? (Или это лучший метод? Я писал их время от времени, так что я не слишком уверен в плюсах и минусах, но, думаю, их не сложно написать)

Ответы [ 3 ]

2 голосов
/ 23 октября 2019

Вы могли бы

tee test.in | ./prog | tee test.out

tee записать стандартный ввод в файл и в стандартный вывод. Таким образом, он позволяет данным, которые проходят через него без изменений, и сохраняет их в файл. См. man tee

Первый tee сохранит входные данные, переданные программе, а второй tee сохранит выходные данные программы.

Таким образом, в концевыполнение (выйдите с помощью Ctrl+C), у вас будет файл test.in с вводом и файл test.out с выводом.

0 голосов
/ 23 октября 2019

Вы ищете здесь документы?

./prog <<\____HERE
input
output
input2
output2
____HERE

Это перенаправляет стандартный ввод из следующих строк файла, содержащего команду (или с клавиатуры, если вы копируете / вставляете это в приглашении),Конечно, вы все равно можете перенаправить стандартный вывод и стандартную ошибку в файлы (или что-то еще) отдельно, если хотите.

Это в значительной степени идентично

printf '%s\n' input \
    output \
    input2 \
    output2 |
./prog
0 голосов
/ 23 октября 2019

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

Вместо стандартной функции printf вы можете использовать fprintf(stderr, "Some other information");

Так что это сообщение победило 'быть перенаправлен с использованием простого >.

Надеюсь, я понял вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...