Verwendung while read
Loop:
: > another_file ## Truncate file.
while IFS= read -r LINE; do
command --option "$LINE" >> another_file
done < file
Eine andere Möglichkeit besteht darin, die Ausgabe blockweise umzuleiten:
while IFS= read -r LINE; do
command --option "$LINE"
done < file > another_file
Zuletzt öffnen Sie die Datei:
exec 4> another_file
while IFS= read -r LINE; do
command --option "$LINE" >&4
echo xyz ## Another optional command that sends output to stdout.
done < file
Wenn einer der Befehle input liest, ist es eine gute Idee, einen anderen fd für die Eingabe zu verwenden, damit die Befehle ihn nicht essen (hier unter der Annahme ksh
, zsh
oder bash
für -u 3
, <&3
stattdessen portabel zu verwenden):
while IFS= read -ru 3 LINE; do
...
done 3< file
Um schließlich Argumente zu akzeptieren, können Sie Folgendes tun:
#!/bin/bash
FILE=$1
ANOTHER_FILE=$2
exec 4> "$ANOTHER_FILE"
while IFS= read -ru 3 LINE; do
command --option "$LINE" >&4
done 3< "$FILE"
Welches könnte man laufen als:
bash script.sh file another_file
Extra Idee. Mit bash
verwenden Sie readarray
:
readarray -t LINES < "$FILE"
for LINE in "${LINES[@]}"; do
...
done
Hinweis: IFS=
Kann weggelassen werden, wenn es Ihnen nichts ausmacht, Zeilenwerte von führenden und nachfolgenden Leerzeichen trennen zu lassen.
<file xargs -L 1 -I{} command --option {} other args