1

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

./run.sh < list.txt

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

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

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

每次我要求它时,我该怎么做才能让脚本读取 list.txt?

4

1 回答 1

6

你不能读两次标准输入。尝试在命令行上传递 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
于 2012-11-22T19:07:01.127 回答