Ответы:
./Myscript.sh "$(cat text.txt)"
Если в файле более одной команды, рассмотрите возможность использования xargs или параллельного кода , например
xargs -d '\n' Myscript.sh < text.txt
parallel -j4 Myscript.sh < text.txt
Пытаться,
$ 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
.
Процесс замены
./Myscript.sh <(cat text.txt)
Смотрите, например, https://www.gnu.org/software/bash/manual/bash.html#Process-Substitution
Читая stdin с mapfile, вы можете переустановить позиционные параметры.
#!/bin/bash
[[ -p /dev/stdin ]] && { mapfile -t; set -- "${MAPFILE[@]}"; }
for i in $@; do
echo "$((++n)) $i"
done
(При цитировании «$ @» for
вместо этого получаются строки цикла).
$ cat test.txt | ./script.sh
1 one
2 two
3 tree
Чтобы завершить @ bac0n, который IMHO является единственным, кто правильно ответит на вопрос, вот короткая строка, которая добавит переданные по конвейеру аргументы к вашему списку аргументов скрипта:
#!/bin/bash
args=$@
[[ -p /dev/stdin ]] && { mapfile -t; set -- "${MAPFILE[@]}"; set -- $@ $args; }
echo $@
Пример использования:
$ ./script.sh arg1 arg2 arg3
> arg1 arg2 arg3
$ echo "piped1 piped2 piped3" | ./script.sh
> piped1 piped2 piped3
$ echo "piped1 piped2 piped3" | ./script.sh arg1 arg2 arg3
> piped1 piped2 piped3 arg1 arg2 arg3