LINUX.ORG.RU
> кроме как через read (stdin уже занят другим)

redirection в школе уже не проходят?

while read -r LINE; do
  echo HEH, got line "$LINE"
done < some_file

у read другая беда -- он искажает строки
dilmah ★★★★★
()
Ответ на: комментарий от dilmah
>redirection в школе уже не проходят?
спасибо, сам уже параллельно нашел...

>у read другая беда -- он искажает строки
???
anonymous
()
Ответ на: комментарий от dilmah
while read -r LINE 1<&3; do
  echo HEH, got line "$LINE"
done 3< some_file
dilmah ★★★★★
()
А какая задача-то? coreutils сами по файлам умеют ходить, не надо делать за них
их работу :)   Ну а так стандартный foreach:

for line in "`cat $FILE`"; do echo "$line"; done
xio
()
Ответ на: комментарий от dilmah
>например, начальные пробелы в строке он пропустит

это все ? в моем случае это вполне допустимо
anonymous
()
Ответ на: комментарий от xio
>А какая задача-то?
прочитать последовательно все строчки из файла

>coreutils сами по файлам умеют ходить, не надо делать за них их работу :)
да наверно, что-то я туплю сегодня...
anonymous
()
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

lodin ★★★★
()
Ответ на: комментарий от lodin
>Так не прокатит?
прокатит, спасибо !
anonymous
()
Ответ на: комментарий от xio
> Так, написал неправильно.

Исправляюсь:

IFS=$'\012'; for line in `cat $FILE`; do echo $line; done

Но некрасиво, да.  Зато не убивает пробелы :)

Еще если с read:

cat $FILE | while read line; do echo $line; done
xio
()
Ответ на: комментарий от anonymous
>>я бы рекомендовал не делать такое на баше…

>почему ?


уж больно медленно и невнятно…
generatorglukoff ★★
()
Ответ на: комментарий от lodin

ERRATA

% 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
lodin ★★★★
()
/usr/bin/djvudump index.djvu |
    /usr/bin/egrep "\.djvu\?$" |
    /usr/bin/egrep -on -- "->.*\.djvu\?$" |
    /usr/bin/sed "s/->  *//" > "$DUMP"

cat "$DUMP" | \
while read l; do
    page=$(echo "$l" | cut -f 1 -d :)
    f=$(echo "$l" | cut -f 2 -d :)
    ...
done
ip1981 ☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.