Ответы:
Что-то вроде этого сделало бы:
xargs cat <filenames.txt
xargs
Программа считывает стандартный ввод, и для каждой линии ввода запускает cat
программу с входными линиями в качестве аргумента (ов).
Если вы действительно хотите сделать это в цикле, вы можете:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
«foreach» - это не название для bash. Это просто "для". Вы можете делать вещи в одну строку только как:
for fn in `cat filenames.txt`; do cat "$fn"; done
Ссылка: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
Вот while
цикл:
while read filename
do
echo "Printing: $filename"
cat "$filename"
done < filenames.txt
read
xargs --arg-file inputfile cat
Это выведет имя файла, за которым следует содержимое файла:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
Возможно, вы захотите обрабатывать пробелы в именах файлов, хотя они и отвратительны :-)
Поэтому я бы изначально выбрал что-то вроде:
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> _