多次将文件传递给shell脚本

时间:2012-11-22 19:04:48

标签: bash sh

我有一个shell脚本,我将txt文件传递给脚本,如下所示:

./run.sh < list.txt

在脚本中,我正在做“while read LIST do ... end

一切正常,脚本使用列表执行。

但是,现在我希望在同一个shell脚本中有第二个while read LIST do ... end。我希望它从原始列表中再次读取我在执行时传递它,但它不起作用。它读取第一个循环的list.txt文件,但不读取第二个循环。

每次我要求时,如何让脚本读取list.txt?

1 个答案:

答案 0 :(得分:6)

你不能两次阅读stdin。尝试在命令行上传递list.txt而不是重定向它。

./run.sh list.txt

然后在你的剧本中:

while read LINE; do
    ...
done < "$1"

while read LINE; do
    ...
done < "$1"

或者,在您第一次阅读时保存stdin的内容。例如:

# First loop, save stdin in an array.
LINES=()

while read LINE; do
    LINES+=("$LINE")
    ...
done

# Second loop, iterate over the array.
for LINE in "${LINES[@]}"; do
    ...
done