Можно ли использовать вывод канала в качестве аргумента сценария оболочки?

25995
Narin

Предположим, у меня есть скрипт оболочки bash, Myscript.shкоторый требует ввода одного аргумента.

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

Я пробовал это, но это не работает:

cat text.txt | ./Myscript.sh 

Есть ли способ сделать это?

18

5 ответов на вопрос

22
Ignacio Vazquez-Abrams

Подстановка команд .

./Myscript.sh "$(cat text.txt)" 
13
zzart

You can use pipe output as a shell script argument.

Try this method:

cat text.txt | xargs -I {} ./Myscript.sh {} 
1
reinierpost

Если в файле более одной команды, рассмотрите возможность использования xargs или параллельного кода, например

xargs -d '\n' Myscript.sh < text.txt parallel -j4 Myscript.sh < text.txt 
0
Ranjithkumar T

Try,

 $ cat comli.txt date who screen wget $ cat comli.sh #!/bin/bash which $1 $ for i in `cat comli.txt` ; do ./comli.sh $i ; done 

so you can enter the values one by one to comli.sh from comli.txt.

0
al-ash

Процесс замены

./Myscript.sh <(cat text.txt) 

См., Например, https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution

Похожие вопросы