19

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

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

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

cat text.txt | ./Myscript.sh

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

5 ответов5

24

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

./Myscript.sh "$(cat text.txt)"
14

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

Попробуйте этот метод:

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

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

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

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

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

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

0

Пытаться,

 $ 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

так что вы можете ввести значения одно за другим в comli.sh из comli.txt .

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