* [devel] О присваивании переменных в циклах на bash
@ 2005-12-27 8:07 Vitaly Lipatov
2005-12-27 8:19 ` Sergey Pinaev
0 siblings, 1 reply; 22+ messages in thread
From: Vitaly Lipatov @ 2005-12-27 8:07 UTC (permalink / raw)
To: ALT Devel discussion list
Простая программа:
TEST=orig
for i in first ; do
TEST=new
done
echo $TEST
Какое слово она выведет? Конечно же
new
А вот эта?
TEST=orig
echo first | while read i ; do
echo "HEHE"
TEST=new
done
echo $TEST
Вот и не угадали - выведен она
HEHE
orig
В /usr/bin/sisyphus_relink наблюдаем такой код:
cat "$list" |while read n; do
f="files/$rfiles/$n"
[ -f "$f" ] || continue
$debug ln -s $verbose "$r/$n" "$d/" || rc=1
done
return $rc
получается rc тоже не присвоится и в коде ошибка?
Но как же всё таки присваивать переменные внутри таких циклов?
--
Lav
Виталий Липатов
Санкт-Петербург
GNU! ALT Linux Team! WINE! LaTeX! LyX! http://freesource.info
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] О присваивании переменных в циклах на bash
2005-12-27 8:07 [devel] О присваивании переменных в циклах на bash Vitaly Lipatov
@ 2005-12-27 8:19 ` Sergey Pinaev
2005-12-27 8:29 ` Alexey I. Froloff
2005-12-27 8:30 ` [devel] О присваивании переменных в циклах на bash Vitaly Lipatov
0 siblings, 2 replies; 22+ messages in thread
From: Sergey Pinaev @ 2005-12-27 8:19 UTC (permalink / raw)
To: ALT Devel discussion list
On Tue, 27 Dec 2005 11:07:35 +0300
Vitaly Lipatov <lav@altlinux.ru> wrote:
> Вот и не угадали - выведен она
Зачем угадывать? С | спавнится новый шелл.
> В /usr/bin/sisyphus_relink наблюдаем такой код:
> cat "$list" |while read n; do
> f="files/$rfiles/$n"
> [ -f "$f" ] || continue
> $debug ln -s $verbose "$r/$n" "$d/" || rc=1
> done
> return $rc
>
> получается rc тоже не присвоится и в коде ошибка?
Да, в родительском шелле rc будет не тот, который был
в шелле, исполняющем while.
> Но как же всё таки присваивать переменные внутри таких циклов?
Не делать таких циклов.
for n in `cat "$list"`; do ...
--
mail="Sergey Pinaev <dfo@antex.ru>"
url="http://`echo $mail | sed 's/.* <\(.*\)@\(.*\)>/\1.\2/'`"
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] О присваивании переменных в циклах на bash
2005-12-27 8:19 ` Sergey Pinaev
@ 2005-12-27 8:29 ` Alexey I. Froloff
2005-12-27 9:05 ` Vitaly Lipatov
2005-12-27 8:30 ` [devel] О присваивании переменных в циклах на bash Vitaly Lipatov
1 sibling, 1 reply; 22+ messages in thread
From: Alexey I. Froloff @ 2005-12-27 8:29 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 416 bytes --]
* Sergey Pinaev <dfo@> [051227 11:21]:
> > Но как же всё таки присваивать переменные внутри таких циклов?
> Не делать таких циклов.
> for n in `cat "$list"`; do ...
А .. | while read a b c ... ?
while read n < "$list"; do
...
--
Regards, Alexey I. Froloff
AIF5-RIPN, AIF5-RIPE
-------------------------------------------
Inform-Mobil, Ltd. System Administrator
http://www.inform-mobil.ru/
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] О присваивании переменных в циклах на bash
2005-12-27 8:29 ` Alexey I. Froloff
@ 2005-12-27 9:05 ` Vitaly Lipatov
2005-12-27 9:10 ` Sergey Pinaev
0 siblings, 1 reply; 22+ messages in thread
From: Vitaly Lipatov @ 2005-12-27 9:05 UTC (permalink / raw)
To: ALT Devel discussion list
On Tuesday 27 December 2005 11:29, Alexey I. Froloff wrote:
> * Sergey Pinaev <dfo@> [051227 11:21]:
> > > Но как же всё таки присваивать переменные внутри таких
> > > циклов?
> >
> > Не делать таких циклов.
> > for n in `cat "$list"`; do ...
>
> А .. | while read a b c ... ?
>
> while read n < "$list"; do
> ...
У меня получается вечный цикл:
cat <<EOF >infile
first
second
EOF
TEST=orig
while read i < infile ; do
echo "HEHE"
TEST=new
done
echo $TEST
--
Lav
Виталий Липатов
Санкт-Петербург
GNU! ALT Linux Team! WINE! LaTeX! LyX! http://freesource.info
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] О присваивании переменных в циклах на bash
2005-12-27 9:05 ` Vitaly Lipatov
@ 2005-12-27 9:10 ` Sergey Pinaev
2005-12-27 9:37 ` [devel] " Vitaly Ostanin
0 siblings, 1 reply; 22+ messages in thread
From: Sergey Pinaev @ 2005-12-27 9:10 UTC (permalink / raw)
To: ALT Devel discussion list
On Tue, 27 Dec 2005 12:05:30 +0300
Vitaly Lipatov <lav@altlinux.ru> wrote:
> > > Не делать таких циклов.
> > > for n in `cat "$list"`; do ...
> >
> > А .. | while read a b c ... ?
> >
> > while read n < "$list"; do
> > ...
> У меня получается вечный цикл:
> cat <<EOF >infile
> first
> second
> EOF
>
> TEST=orig
> while read i < infile ; do
> echo "HEHE"
> TEST=new
> done
> echo $TEST
while read var; do
...
done < infile
--
mail="Sergey Pinaev <dfo@antex.ru>"
url="http://`echo $mail | sed 's/.* <\(.*\)@\(.*\)>/\1.\2/'`"
^ permalink raw reply [flat|nested] 22+ messages in thread
* [devel] Re: О присваивании переменных в циклах на bash
2005-12-27 9:10 ` Sergey Pinaev
@ 2005-12-27 9:37 ` Vitaly Ostanin
2005-12-27 9:41 ` Sergey Pinaev
2005-12-28 12:25 ` Sergey V Turchin
0 siblings, 2 replies; 22+ messages in thread
From: Vitaly Ostanin @ 2005-12-27 9:37 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 710 bytes --]
Sergey Pinaev пишет:
> On Tue, 27 Dec 2005 12:05:30 +0300
> Vitaly Lipatov <lav@altlinux.ru> wrote:
>
>
>>>>Не делать таких циклов.
>>>>for n in `cat "$list"`; do ...
>>>
>>>А .. | while read a b c ... ?
>>>
>>>while read n < "$list"; do
>>>...
>>
>>У меня получается вечный цикл:
>>cat <<EOF >infile
>>first
>>second
>>EOF
>>
>>TEST=orig
>>while read i < infile ; do
>> echo "HEHE"
>> TEST=new
>>done
>>echo $TEST
>
>
> while read var; do
> ...
> done < infile
А как то же самое сделать для переменной (содержащей список
строк) вместо infile ? У меня не заработал ни один из вариантов.
--
Regards, Vyt
mailto: vyt@vzljot.ru
JID: vyt@vzljot.ru
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] Re: О присваивании переменных в циклах на bash
2005-12-27 9:37 ` [devel] " Vitaly Ostanin
@ 2005-12-27 9:41 ` Sergey Pinaev
2005-12-27 10:03 ` Vitaly Ostanin
2005-12-27 10:04 ` Aleksey Avdeev
2005-12-28 12:25 ` Sergey V Turchin
1 sibling, 2 replies; 22+ messages in thread
From: Sergey Pinaev @ 2005-12-27 9:41 UTC (permalink / raw)
To: ALT Devel discussion list
On Tue, 27 Dec 2005 12:37:17 +0300
Vitaly Ostanin <vyt@vzljot.ru> wrote:
> А как то же самое сделать для переменной (содержащей список
> строк) вместо infile ? У меня не заработал ни один из вариантов.
Давай я тебя сразу на http://www.tldp.org/LDP/abs/html/ пошлю? =)
--
mail="Sergey Pinaev <dfo@antex.ru>"
url="http://`echo $mail | sed 's/.* <\(.*\)@\(.*\)>/\1.\2/'`"
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] Re: О присваивании переменных в циклах на bash
2005-12-27 9:37 ` [devel] " Vitaly Ostanin
2005-12-27 9:41 ` Sergey Pinaev
@ 2005-12-28 12:25 ` Sergey V Turchin
2006-01-12 15:10 ` [devel] Re: н ОПХЯБЮХБЮМХХ ОЕПЕЛЕММШУ Б ЖХЙКЮУ МЮ bash Vitaly Ostanin
1 sibling, 1 reply; 22+ messages in thread
From: Sergey V Turchin @ 2005-12-28 12:25 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 412 bytes --]
On Tuesday 27 December 2005 12:37, Vitaly Ostanin wrote:
[...]
> > while read var; do
> > ...
> > done < infile
>
> А как то же самое сделать для переменной (содержащей список
> строк) вместо infile ? У меня не заработал ни один из вариантов.
ls -d1| \
while read l
do
ls -l "$l"
done
--
Regards, Sergey, ALT Linux Team, http://www.altlinux.ru
http://stinkfoot.org:11371/pks/lookup?op=get&search=0x1C2A3F08
[-- Attachment #2: Type: application/pgp-signature, Size: 190 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* [devel] Re: н ОПХЯБЮХБЮМХХ ОЕПЕЛЕММШУ Б ЖХЙКЮУ МЮ bash
2005-12-28 12:25 ` Sergey V Turchin
@ 2006-01-12 15:10 ` Vitaly Ostanin
2006-01-12 17:05 ` [devel] Re: ... bash Sviatoslav Sviridov
0 siblings, 1 reply; 22+ messages in thread
From: Vitaly Ostanin @ 2006-01-12 15:10 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 839 bytes --]
Sergey V Turchin пишет:
> On Tuesday 27 December 2005 12:37, Vitaly Ostanin wrote:
>
> [...]
>
>
>>>while read var; do
>>>...
>>>done < infile
>>
>>А как то же самое сделать для переменной (содержащей список
>>строк) вместо infile ? У меня не заработал ни один из вариантов.
>
> ls -d1| \
> while read l
> do
> ls -l "$l"
> done
Исходная задача в изменении глобальной переменной внутри while. В
этом примере while после |, и переменные родительскому процессу
не возвращаются.
Из
http://www.tldp.org/LDP/abs/html/
я так понял, что единственный вариант - дописывание значений
внутри while в файл, и потом чтение этого файла родительским
процессом.
PS Опять thunderbird портит subject при ответах на письма из kmail :(
<skipped/>
--
Regards, Vyt
mailto: vyt@vzljot.ru
JID: vyt@vzljot.ru
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] Re: ... bash
2006-01-12 15:10 ` [devel] Re: н ОПХЯБЮХБЮМХХ ОЕПЕЛЕММШУ Б ЖХЙКЮУ МЮ bash Vitaly Ostanin
@ 2006-01-12 17:05 ` Sviatoslav Sviridov
2006-01-13 10:29 ` [devel] bash Vitaly Ostanin
0 siblings, 1 reply; 22+ messages in thread
From: Sviatoslav Sviridov @ 2006-01-12 17:05 UTC (permalink / raw)
To: ALT Devel discussion list
Vitaly Ostanin wrote on 1/12/2006 5:10 PM:
>>>> while read var; do
>>>> ...
>>>> done < infile
>>> А как то же самое сделать для переменной (содержащей список
>>> строк) вместо infile ? У меня не заработал ни один из вариантов.
>> ls -d1| \
>> while read l
>> do
>> ls -l "$l"
>> done
>
> Исходная задача в изменении глобальной переменной внутри while. В
> этом примере while после |, и переменные родительскому процессу
> не возвращаются.
>
> Из
> http://www.tldp.org/LDP/abs/html/
> я так понял, что единственный вариант - дописывание значений
> внутри while в файл, и потом чтение этого файла родительским
> процессом.
Ну почему же...
Извините, пропустил начало дискуссии... но может угадаю чего надо? ;)
Из процитированного понял, что надо чтобы while выполнялся в
родительском процессе и при этом читал вывод другого процесса? что-то
типа вот этого:
$ list="line1
> line2
> line3"
$ a=qqq
$ while read l; do a="$l"; done < <(echo "$list")
$ echo $a
line3
Так пойдет?
--
Best Regards,
Sviatoslav Sviridov
^ permalink raw reply [flat|nested] 22+ messages in thread
* [devel] Re: bash
2006-01-12 17:05 ` [devel] Re: ... bash Sviatoslav Sviridov
@ 2006-01-13 10:29 ` Vitaly Ostanin
2006-01-13 10:43 ` Sviataslau Svirydau
0 siblings, 1 reply; 22+ messages in thread
From: Vitaly Ostanin @ 2006-01-13 10:29 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 978 bytes --]
Sviatoslav Sviridov пишет:
<skipped/>
>>Исходная задача в изменении глобальной переменной внутри while. В
>>этом примере while после |, и переменные родительскому процессу
>>не возвращаются.
>>
>>Из
>>http://www.tldp.org/LDP/abs/html/
>>я так понял, что единственный вариант - дописывание значений
>>внутри while в файл, и потом чтение этого файла родительским
>>процессом.
>
> Ну почему же...
> Извините, пропустил начало дискуссии... но может угадаю чего надо? ;)
>
> Из процитированного понял, что надо чтобы while выполнялся в
> родительском процессе и при этом читал вывод другого процесса? что-то
> типа вот этого:
>
> $ list="line1
>
>>line2
>>line3"
>
> $ a=qqq
> $ while read l; do a="$l"; done < <(echo "$list")
> $ echo $a
> line3
>
> Так пойдет?
Шаман! Пошло. А что это за конструкция после done ? Впервые вижу
такое перенаправление (?) через пробел.
--
Regards, Vyt
mailto: vyt@vzljot.ru
JID: vyt@vzljot.ru
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] Re: bash
2006-01-13 10:29 ` [devel] bash Vitaly Ostanin
@ 2006-01-13 10:43 ` Sviataslau Svirydau
2006-01-13 11:50 ` Vitaly Ostanin
0 siblings, 1 reply; 22+ messages in thread
From: Sviataslau Svirydau @ 2006-01-13 10:43 UTC (permalink / raw)
To: ALT Devel discussion list
Vitaly Ostanin wrote on 1/13/2006 12:29 PM:
> Шаман! Пошло. А что это за конструкция после done ? Впервые вижу
> такое перенаправление (?) через пробел.
>
Это process substitution.
Первый "<" - это стандартное перенаправление.
А остаток <(...) фактически заменяется на /dev/fdX, где /dev/fdX - новый
файловый дескриптор, открываемый шеллом.
А то, что внутри скобок запускается с перенаправлением вывода в /dev/fdX.
Работает также и в другую сторону :)
--
Best Regards,
Sviatoslav Sviridov
^ permalink raw reply [flat|nested] 22+ messages in thread
* [devel] Re: bash
2006-01-13 10:43 ` Sviataslau Svirydau
@ 2006-01-13 11:50 ` Vitaly Ostanin
2006-01-13 13:19 ` Dmitry V. Levin
0 siblings, 1 reply; 22+ messages in thread
From: Vitaly Ostanin @ 2006-01-13 11:50 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 636 bytes --]
Sviataslau Svirydau пишет:
> Vitaly Ostanin wrote on 1/13/2006 12:29 PM:
>
>>Шаман! Пошло. А что это за конструкция после done ? Впервые вижу
>>такое перенаправление (?) через пробел.
>
> Это process substitution.
> Первый "<" - это стандартное перенаправление.
> А остаток <(...) фактически заменяется на /dev/fdX, где /dev/fdX - новый
> файловый дескриптор, открываемый шеллом.
> А то, что внутри скобок запускается с перенаправлением вывода в /dev/fdX.
> Работает также и в другую сторону :)
Обалдеть... Спасибо! А где про это почитать можно?
--
Regards, Vyt
mailto: vyt@vzljot.ru
JID: vyt@vzljot.ru
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 256 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] Re: bash
2006-01-13 11:50 ` Vitaly Ostanin
@ 2006-01-13 13:19 ` Dmitry V. Levin
0 siblings, 0 replies; 22+ messages in thread
From: Dmitry V. Levin @ 2006-01-13 13:19 UTC (permalink / raw)
To: ALT Devel discussion list
[-- Attachment #1: Type: text/plain, Size: 790 bytes --]
On Fri, Jan 13, 2006 at 02:50:41PM +0300, Vitaly Ostanin wrote:
> Sviataslau Svirydau пишет:
> > Vitaly Ostanin wrote on 1/13/2006 12:29 PM:
> >
> >>Шаман! Пошло. А что это за конструкция после done ? Впервые вижу
> >>такое перенаправление (?) через пробел.
> >
> > Это process substitution.
> > Первый "<" - это стандартное перенаправление.
> > А остаток <(...) фактически заменяется на /dev/fdX, где /dev/fdX - новый
> > файловый дескриптор, открываемый шеллом.
> > А то, что внутри скобок запускается с перенаправлением вывода в /dev/fdX.
> > Работает также и в другую сторону :)
>
> Обалдеть... Спасибо! А где про это почитать можно?
bash(1), "Process Substitution". На GNU/Linux для работы через /dev/fdX
необходимо, чтобы был смонтирован /proc.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* Re: [devel] О присваивании переменных в циклах на bash
2005-12-27 8:19 ` Sergey Pinaev
2005-12-27 8:29 ` Alexey I. Froloff
@ 2005-12-27 8:30 ` Vitaly Lipatov
2005-12-27 8:33 ` Sergey Pinaev
2005-12-27 20:27 ` Denis Ovsienko
1 sibling, 2 replies; 22+ messages in thread
From: Vitaly Lipatov @ 2005-12-27 8:30 UTC (permalink / raw)
To: ALT Devel discussion list
On Tuesday 27 December 2005 11:19, Sergey Pinaev wrote:
> On Tue, 27 Dec 2005 11:07:35 +0300
>
> Vitaly Lipatov <lav@altlinux.ru> wrote:
> > Вот и не угадали - выведен она
>
> Зачем угадывать? С | спавнится новый шелл.
>
> > В /usr/bin/sisyphus_relink наблюдаем такой код:
> > cat "$list" |while read n; do
> > f="files/$rfiles/$n"
> > [ -f "$f" ] || continue
> > $debug ln -s $verbose "$r/$n" "$d/" || rc=1
> > done
> > return $rc
> >
> > получается rc тоже не присвоится и в коде ошибка?
>
> Да, в родительском шелле rc будет не тот, который был
> в шелле, исполняющем while.
То есть вешаем баг на
/usr/bin/sisyphus_relink
>
> > Но как же всё таки присваивать переменные внутри таких
> > циклов?
>
> Не делать таких циклов.
> for n in `cat "$list"`; do ...
Дело в том что задача такова:
читать из файла, содержащего несколько значений в строке через
пробел (а это наиболее удобно через read), а for позволит только
одним значением оперировать (или ему можно разделитель
поменять?)
--
Lav
Виталий Липатов
Санкт-Петербург
GNU! ALT Linux Team! WINE! LaTeX! LyX! http://freesource.info
^ permalink raw reply [flat|nested] 22+ messages in thread
end of thread, other threads:[~2006-01-13 13:19 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-12-27 8:07 [devel] О присваивании переменных в циклах на bash Vitaly Lipatov
2005-12-27 8:19 ` Sergey Pinaev
2005-12-27 8:29 ` Alexey I. Froloff
2005-12-27 9:05 ` Vitaly Lipatov
2005-12-27 9:10 ` Sergey Pinaev
2005-12-27 9:37 ` [devel] " Vitaly Ostanin
2005-12-27 9:41 ` Sergey Pinaev
2005-12-27 10:03 ` Vitaly Ostanin
2005-12-27 10:04 ` Aleksey Avdeev
2005-12-27 12:53 ` Ivan Fedorov
2005-12-27 13:22 ` Aleksey Avdeev
2005-12-27 13:57 ` Ivan Fedorov
2005-12-28 12:25 ` Sergey V Turchin
2006-01-12 15:10 ` [devel] Re: н ОПХЯБЮХБЮМХХ ОЕПЕЛЕММШУ Б ЖХЙКЮУ МЮ bash Vitaly Ostanin
2006-01-12 17:05 ` [devel] Re: ... bash Sviatoslav Sviridov
2006-01-13 10:29 ` [devel] bash Vitaly Ostanin
2006-01-13 10:43 ` Sviataslau Svirydau
2006-01-13 11:50 ` Vitaly Ostanin
2006-01-13 13:19 ` Dmitry V. Levin
2005-12-27 8:30 ` [devel] О присваивании переменных в циклах на bash Vitaly Lipatov
2005-12-27 8:33 ` Sergey Pinaev
2005-12-27 20:27 ` Denis Ovsienko
ALT Linux Team development discussions
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
public-inbox-index devel
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git