> кроме как через read (stdin уже занят другим)
redirection в школе уже не проходят?
while read -r LINE; do
echo HEH, got line "$LINE"
done < some_file
у read другая беда -- он искажает строки
А какая задача-то? coreutils сами по файлам умеют ходить, не надо делать за них
их работу :) Ну а так стандартный foreach:
for line in "`cat $FILE`"; do echo "$line"; done
while read i; do
do_something $i
done <file.input
Так не прокатит?
Или нужен стдин внутри цикла?
Тогда можно "прикопать" дескриптор файла:
% cat >list
file1
file2
file13
Ctrl-D
% while read i; # тут будет прочитан файл 'list'
echo "Please fill file $i"
do cat <&3 >>$i; # тут будет прочитан stdin до Ctrl-D
done 3<&0 <list
> Так, написал неправильно.
Исправляюсь:
IFS=$'\012'; for line in `cat $FILE`; do echo $line; done
Но некрасиво, да. Зато не убивает пробелы :)
Еще если с read:
cat $FILE | while read line; do echo $line; done
% while read i; # тут будет прочитан файл 'list'
echo "Please fill file $i"
do cat <&3 >>$i; # тут будет прочитан stdin до Ctrl-D
done 3<&0 <list
Разумеется, это не работает, потому что кто-то не смотрит, что печатает. В данном случае команда echo выполняется не в теле цикла, а в условии while. Которое от этого становится истинным!
Fixed:
% while read i; do # тут будет прочитан файл 'list'
echo "Please fill file $i"
cat <&3 >>$i; # тут будет прочитан stdin до Ctrl-D
done 3<&0 <list