1

次のように、txtファイルをスクリプトに渡すシェルスクリプトがあります。

./run.sh < list.txt

スクリプト内で、" while read LIST do ... end"を実行しています。

すべてうまく機能し、スクリプトはリストを使用して実行されます。

while read LIST do ... endただし、今は同じシェル スクリプトに1 秒を入れたいと思っています。実行時に渡している元のリストから再度読み取ってもらいたいのですが、うまくいきません。最初のループでは list.txt ファイルを読み取りますが、2 番目のループでは読み取りません。

要求するたびにスクリプトが list.txt を読み取るようにするにはどうすればよいですか?

4

1 に答える 1

6

stdin を 2 回読み取ることはできません。リダイレクトするのではなく、コマンドラインで 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 に答える