Câu trả lời:
./Myscript.sh "$(cat text.txt)"
Thử,
$ 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
vì vậy bạn có thể nhập các giá trị từng người một để comli.sh
từ comli.txt
.
Quá trình thay thế
./Myscript.sh <(cat text.txt)
Xem ví dụ: https://www.gnu.org/software/bash/manual/bash.html#Process-Substlation
Bằng cách đọc stdin với mapfile, bạn có thể đặt lại các tham số vị trí.
#!/bin/bash
[[ -p /dev/stdin ]] && { mapfile -t; set -- "${MAPFILE[@]}"; }
for i in $@; do
echo "$((++n)) $i"
done
(Trích dẫn "$ @" sẽ tạo for
các đường vòng thay thế).
$ cat test.txt | ./script.sh
1 one
2 two
3 tree
Để hoàn thành @ bac0n mà IMHO là người duy nhất trả lời chính xác câu hỏi, đây là một đoạn ngắn sẽ bổ sung các đối số được dẫn vào danh sách đối số tập lệnh của bạn:
#!/bin/bash
args=$@
[[ -p /dev/stdin ]] && { mapfile -t; set -- "${MAPFILE[@]}"; set -- $@ $args; }
echo $@
Ví dụ sử dụng:
$ ./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