Sto cercando di scrivere uno script che accetta un .txt nomefile come argomento, legge il file riga per riga e passa ogni riga a un comando. Ad esempio, esegue command --option "LINE 1" , quindi command --option "LINE 2" , ecc. L'output del comando viene scritto in un altro file. Come faccio a farlo? Non so da dove cominciare.
Risposta accettata:
 Usa while read ciclo:
: > another_file  ## Truncate file.
while IFS= read -r LINE; do
    command --option "$LINE" >> another_file
done < file
 Un altro è reindirizzare l'output per blocco:
while IFS= read -r LINE; do
    command --option "$LINE"
done < file > another_file
 L'ultimo è aprire il 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
 
 Se uno dei comandi legge l'input, sarebbe una buona idea usare un altro fd per l'input in modo che i comandi non lo mangino (qui assumendo ksh , zsh o bash per -u 3 , usa <&3 invece portatile):
while IFS= read -ru 3 LINE; do
    ...
done 3< file
 Infine per accettare argomenti, puoi fare:
#!/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"
 Quale potrebbe essere eseguito come:
bash script.sh file another_file
 
 Un'idea in più. Con bash , usa readarray :
readarray -t LINES < "$FILE"
for LINE in "${LINES[@]}"; do
    ...
done
 
 Nota:IFS= può essere omesso se non ti dispiace avere i valori di riga tagliati dagli spazi iniziali e finali.