0

假设我有一个名为 myscript 的脚本,它需要两个参数,应该按以下方式运行:

./myscript 1st 2nd

我也有一个这样的文本文件:

213 432
312 54
34 41
1 32

问题是如何使用文本文件的内容作为输入来运行 myscript?

输入重定向应导致运行与以下内容完全相同:

./myscript 213 432
./myscript 312 54
./myscript 34 41
./myscript 1 32

谢谢你。

如果我不知道我的脚本所需的参数数量怎么办?

4

2 回答 2

2

您可以使用while read将用 $IFS 分隔的文本文件中的行读取到两个变量中并使用它调用 myscript:

while read -r A B; do
    ./myscript "$A" "$B"
done < text_file

要将每一行作为一个完整的参数传递:

while read -r A; do
    ./myscript "$A"
done < text_file

要将每一行的每个标记作为参数传递:

while read -ra A; do
    ./myscript "${A[@]}"
done < text_file
于 2013-09-14T19:31:16.037 回答
1

只要您不必在参数中保留任何空格,您就可以使用以下方法管理无限数量的参数:

while read -r line
do ./myscript $line
done < text_file

如果您必须保留空格、解释引号等,那么最好的选择可能是:

sed 's%^%./myscript %' text_file | bash

这会在文件中每一行的开头插入命令,然后通过bash.

于 2013-09-14T20:07:39.700 回答