Risposte:
Qualcosa del genere farebbe:
xargs cat <filenames.txt
Il xargsprogramma legge il suo input standard e per ogni riga di input esegue il catprogramma con le righe di input come argomento (i).
Se vuoi davvero farlo in un ciclo, puoi:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
"foreach" non è il nome di bash. È semplicemente "per". Puoi fare le cose in una sola riga come:
for fn in `cat filenames.txt`; do cat "$fn"; done
Riferimento: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Ecco un whileciclo:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
read
xargs --arg-file inputfile cat
Questo produrrà il nome del file seguito dal contenuto del file:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Probabilmente vorrai gestire gli spazi nei nomi dei tuoi file, per quanto orribili siano :-)
Quindi inizialmente opterei per qualcosa del tipo:
pax> cat qq.in
normalfile.txt
file with spaces.doc
pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>
pax> _