На самом деле это единственный раздел про unix на этом форуме
Модераторы: /dev/random , Модераторы разделов
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих
Сообщение
elide » 11.05.2005 17:14
есть, к примеру, вот такой скриптик
Код: Выделить всё
#!/bin/bash
flag=0
/bin/ps -A | while read i
do
flag=$((flag+1))
echo $flag
done
echo "and finally: $flag"
очень хочется, тобы в строчке после done $flag был равен тому, до чего он дошел внутри while. очевидно, что вся конструкция while запускается в отдельном процессе bash, поэтому все работает совсем не так, как мне хочется. собственно вопро: как фиксить?
elide добавил в
11.05.2005 17:14
пройдясь по залежам инфы в собственной памяти, переписал код в виде
Код: Выделить всё
#!/bin/bash
flag=0
while read i
do
flag=$((flag+1))
echo $flag
done <<EOT
`/bin/ps -A`
EOT
echo "and finally: $flag"
теперь все заработало.
но кто-нибудь, обясните мне, почему эта конструкция выполняется в одном процессе?
слава роботам!
madskull
Сообщения: 1019
Статус: Экс-металлюга
Сообщение
madskull » 11.05.2005 23:33
Виноват пайп "bla-bla-bla | while ...."
Не помню, где видел научное обоснование... если найду, сообщу.
Arch Linux / Ice WM
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE
Сообщение
t.t » 13.05.2005 13:08
(elide @ Среда, 11 Мая 2005, 16:14) писал(а): но кто-нибудь, обясните мне, почему эта конструкция выполняется в одном процессе?
Потому что тут нет конвейеризации.
(madskull @ Среда, 11 Мая 2005, 22:33) писал(а): Виноват пайп "bla-bla-bla | while ...."
Не помню, где видел научное обоснование... если найду, сообщу.
Обоснование чего? Что использование пайпа создаёт дополнительный процесс? А разве пайпом можно соединить один процесс сам с собой?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
madskull
Сообщения: 1019
Статус: Экс-металлюга
Сообщение
madskull » 13.05.2005 15:53
(t.t @ Пятница, 13 Мая 2005, 12:08) писал(а): (elide @ Среда, 11 Мая 2005, 16:14) писал(а): но кто-нибудь, обясните мне, почему эта конструкция выполняется в одном процессе?
Потому что тут нет конвейеризации.
(madskull @ Среда, 11 Мая 2005, 22:33) писал(а): Виноват пайп "bla-bla-bla | while ...."
Не помню, где видел научное обоснование... если найду, сообщу.
Обоснование чего? Что использование пайпа создаёт дополнительный процесс? А разве пайпом можно соединить один процесс сам с собой?
Все правильно. Просто я тогда не умел правильно высказаться.
Устал очень (а вы что подумали?
)
Arch Linux / Ice WM
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE
Сообщение
t.t » 13.05.2005 18:22
(madskull @ Пятница, 13 Мая 2005, 14:53) писал(а): Устал очень (а вы что подумали? )
Ничего...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж