我有一个shell脚本,我将txt文件传递给脚本,如下所示:
./run.sh < list.txt
在脚本中,我正在做“while read LIST do ... end
”
一切正常,脚本使用列表执行。
但是,现在我希望在同一个shell脚本中有第二个while read LIST do ... end
。我希望它从原始列表中再次读取我在执行时传递它,但它不起作用。它读取第一个循环的list.txt文件,但不读取第二个循环。
每次我要求时,如何让脚本读取list.txt?
答案 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