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 ☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.