bash перенаправление вывода не работает

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
gaux
Сообщения: 185
ОС: FreeBSD

bash перенаправление вывода не работает

Сообщение gaux »

Не пойму почему не работает. Пишу как и положено:

while read STRING
do
....
done< <( cat "$filename" )

Syntax error: redirection unexpected

Нашел еше вариант синтаксиса:

while read STRING
do
....
done <<< ( cat "$filename" )

Тоже самое: Syntax error: redirection unexpected

Такой вариант не подходит, потому что переменные должны сущестовать после цикла.

cat "$filename" | while read STRING
do
....
done

Может кто знает почему это не работает? До этого работало и писал точно так же. Только похоже версия bash была другой.

bash --version
GNU bash, version 3.2.39(1)-release (x86_64-pc-linux-gnu)
Copyright © 2007 Free Software Foundation, Inc.
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

Re: bash перенаправление вывода не работает

Сообщение Sleeping Daemon »

gaux писал(а):
27.08.2008 15:26
Не пойму почему не работает. Пишу как и положено:

while read STRING
do
....
done< <( cat "$filename" )

Syntax error: redirection unexpected

Нашел еше вариант синтаксиса:

while read STRING
do
....
done <<< ( cat "$filename" )

Тоже самое: Syntax error: redirection unexpected

Такой вариант не подходит, потому что переменные должны сущестовать после цикла.

cat "$filename" | while read STRING
do
....
done

Может кто знает почему это не работает? До этого работало и писал точно так же. Только похоже версия bash была другой.

bash --version
GNU bash, version 3.2.39(1)-release (x86_64-pc-linux-gnu)
Copyright © 2007 Free Software Foundation, Inc.

Может так: done < $filename"
Спасибо сказали:
Аватара пользователя
gaux
Сообщения: 185
ОС: FreeBSD

Re: bash перенаправление вывода не работает

Сообщение gaux »

Пример написал краткий, расписывать не стал, алгоритм сложнее. Вывод команды потом перенаправляется в цикл и строки обрабатываются. Не хотел создавать временный файл на диске, а хотел воспользоваться каналами. Вот оно как раз и не работает.
Спасибо сказали:
Аватара пользователя
Rootlexx
Бывший модератор
Сообщения: 4455
Статус: GNU generation
ОС: Debian GNU/Linux

Re: bash перенаправление вывода не работает

Сообщение Rootlexx »

gaux писал(а):
27.08.2008 15:26
while read STRING
do
....
done< <( cat "$filename" )

Всё работает:

Код: Выделить всё

[rootlexx@localhost ~]$ while read line; do printf "%s\n" "$line"; done < <(cat /etc/fstab)
# Entry for /dev/hda3 :
UUID=a53647fe-149f-11dd-9805-a33ae3977bbd / reiserfs notail,relatime,user_xattr,acl 1 1
# Entry for /dev/hda7 :
UUID=a761614e-149f-11dd-9d6e-3b801869113b /home reiserfs notail,relatime,user_xattr,acl 1 2
/dev/hdc /media/cdrom auto umask=0,users,iocharset=utf8,noauto,ro,exec 0 0
/dev/hdd /media/cdrom2 auto umask=0,users,iocharset=utf8,noauto,ro,exec 0 0
/dev/fd0 /media/floppy auto umask=0,users,iocharset=utf8,noauto,exec,flush 0 0
# Entry for /dev/hda1 :
UUID=24E09FC7E09F9D9C /mnt/win_c ntfs-3g defaults 0 0
# Entry for /dev/hda5 :
UUID=8ADC25A7DC258E8F /mnt/win_d ntfs-3g defaults 0 0
none /proc proc defaults 0 0
# Entry for /dev/hda6 :
UUID=a750f5a2-149f-11dd-9e06-4592dc05695d swap swap defaults 0 0
[rootlexx@localhost ~]$
Спасибо сказали:
Аватара пользователя
gaux
Сообщения: 185
ОС: FreeBSD

Re: bash перенаправление вывода не работает

Сообщение gaux »

Заработался%) Выполняемым не сделал и пытался скормить sh, а не bash:D

Хотя странно:

$ ls -l /bin/sh
/bin/sh -> bash

sh указывает на bash.

Так пишу:
$ sh /home/andrey/ldif/test.sh
/home/andrey/ldif/test.sh: line 3: syntax error near unexpected token `<'
/home/andrey/ldif/test.sh: line 3: `while read line; do printf "%s\n" "$line"; done < <(cat /etc/fstab)'

Так пишу:
$ bash /home/andrey/ldif/test.sh

Работает. Но программа то по идее одна и та же вызывается O_O

$ whereis sh
sh: /bin/sh /usr/share/man/man1p/sh.1p.gz /usr/share/man/man1/sh.1.gz
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: bash перенаправление вывода не работает

Сообщение rm_ »

Но программа то по идее одна и та же вызывается

Баш смотрит, под каким именем вызывается, и ведёт себя по разному в зависимости от этого.
Спасибо сказали:
Аватара пользователя
gaux
Сообщения: 185
ОС: FreeBSD

Re: bash перенаправление вывода не работает

Сообщение gaux »

rm_ писал(а):
27.08.2008 17:01
Но программа то по идее одна и та же вызывается

Баш смотрит, под каким именем вызывается, и ведёт себя по разному в зависимости от этого.


Забыл совсем, что некоторые программы так работают, но обычно - это жесткая ссылка, а не мягкая:) На bash первый раз такой серьезный скрипт пишу. До этого в основном web занимался в никсах.
Спасибо сказали: