Допустим, у меня есть скрипт script
, который читает stdin
и выводит некоторые результаты на экран.
Если бы я хотел передать ему содержимое одного файла, я бы набрал:
$ ./script < file1.txt
Но что, если я хочу передать содержимое нескольких файлов в сценарий одинаково, возможно ли это вообще? Лучшее, что я придумал, было:
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Который использует две команды и создает временный файл. Есть ли способ сделать то же самое, но в обход создания объединенного файла?
bash
shell
scripting
io-redirection
0x4B1D
источник
источник
zsh
и вы сможете бежатьcmd <file1 <file2 ... <fileN
;)Ответы:
Вы можете использовать
cat
и трубу:Ваш пример с использованием канала и без временного файла:
источник
join
без временного файла, но просто чтобы прояснить это для читателя:cat f1 f2
неjoin f1 f2
join
в своем примере, потому что я играл с ним раньше; на самом деле, для моего примера я использовалcat
.Если вы не хотите использовать канал, вы можете использовать перенаправление ввода с подстановкой процесса:
источник
Чтобы добавить ответ @Jonah Braun, если вам когда-либо понадобится добавить вывод процесса в ваш скрипт, то есть ваш файл может быть не на вашем диске, а доступ к нему осуществляется с
URL
помощьюcurl
или подобного инструмента.Нечто подобное можно использовать для получения
stdout
нескольких процессов и использования их в сценарии с помощьюstdin
Это будет скрипт для обработки ввода. Содержимое
multi-input.sh
:Теперь проверьте это:
Выход:
<()
превращает процесс в виртуальноеfile
использование,fd
если хотите, поэтому<
необходимо прочитать его.cat
Само по себе это не нужно, потому что оно делает то, что делает, объединяет файлы, виртуальные или реальные.источник