while readलूप का उपयोग करें :
: > another_file ## Truncate file.
while IFS= read -r LINE; do
command --option "$LINE" >> another_file
done < file
एक और ब्लॉक द्वारा आउटपुट को रीडायरेक्ट करना है:
while IFS= read -r LINE; do
command --option "$LINE"
done < file > another_file
अंतिम फ़ाइल खोलने के लिए है:
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
यदि कोई कमांड इनपुट पढ़ता है, तो इनपुट के लिए दूसरे fd का उपयोग करना एक अच्छा विचार होगा, इसलिए कमांड इसे नहीं खाएंगे (यहां मान लें ksh, zshया इसके bashलिए -u 3, <&3इसके बजाय उपयोग करें )
while IFS= read -ru 3 LINE; do
...
done 3< file
अंत में तर्क स्वीकार करने के लिए, आप कर सकते हैं:
#!/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"
जो एक के रूप में चला सकता है:
bash script.sh file another_file
अतिरिक्त विचार। bashउपयोग के साथ readarray:
readarray -t LINES < "$FILE"
for LINE in "${LINES[@]}"; do
...
done
ध्यान दें: IFS=यदि आपको लाइन मानों को अग्रणी और अनुगामी स्थानों की छंटनी करने का मन नहीं है तो छोड़ा जा सकता है।
<file xargs -L 1 -I{} command --option {} other args