🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
9 messages
9 total messages Started by Tomasz Kobus Fri, 08 Feb 2013 08:14
bash while done zmienna problem
#72591
Author: Tomasz Kobus
Date: Fri, 08 Feb 2013 08:14
15 lines
1174 bytes
Witam, mam taki skrypcik

#!/bin/sh
zmienna=0
cat plik| while read line
do
	echo $line
 	zmienna=3
done
echo $zmienna

i niestety na wyjściu (pomijając linie pliku) mam wynik "0" a
chciałbym mieć "3"

Jakieś pomysły?
Re: bash while done zmienna problem
#72592
Author: Kamil Jońca
Date: Fri, 08 Feb 2013 09:23
26 lines
1407 bytes
Tomasz Kobus <Ra.spam-niet@t.k.pl> writes:

> Witam, mam taki skrypcik
>
> #!/bin/sh
> zmienna=0
> cat plik| while read line
> do
> 	echo $line
>  	zmienna=3
> done
> echo $zmienna
>
> i niestety na wyjściu (pomijając linie pliku) mam wynik "0" a
> chciałbym mieć "3"
>
> Jakieś pomysły?

Czy przepisałeś czy zacytowałeś ten skrypt? 
Bo obstawiam literówkę w nazwie zmiennej w ciele pętli.

KJ

-- 
http://blogdebart.pl/2009/12/22/mamy-chorych-dzieci/
<Teller> where am I and what am I doing in this handbasket?
Re: bash while done zmienna problem
#72593
Author: PawelS
Date: Tue, 12 Feb 2013 03:52
25 lines
1635 bytes
Kamil Jońca pisze:
> Tomasz Kobus <Ra.spam-niet@t.k.pl> writes:
>> #!/bin/sh
>> zmienna=0
>> cat plik| while read line
>> do
>> 	echo $line
>>  	zmienna=3
>> done
>> echo $zmienna
>>
>> i niestety na wyjściu (pomijając linie pliku) mam wynik "0" a
>> chciałbym mieć "3"
> 
> Czy przepisałeś czy zacytowałeś ten skrypt? 
> Bo obstawiam literówkę w nazwie zmiennej w ciele pętli.

A ja obstawiam, że nie wiesz jak działa sh/bash,
sam jestem zaskoczony, że tak to działa,
ale przepisz powyższy skrypt dodając sleep 1
po zmienna=3 a przed done i wyświetl sobie listę procesów,
to zobaczysz bash, bash i sleep.
To dlatego ta zmienna jest ustawiona w pętli
i poza pętlą w bashu w dalszym ciągu jest 0.
Niestety export zmiennej do środowiska też nie pomaga.
Re: bash while done zmienna problem
#72594
Author: Michoo
Date: Tue, 12 Feb 2013 10:22
43 lines
2219 bytes
On 12.02.2013 04:52, PawelS wrote:
> Kamil Jońca pisze:
>> Tomasz Kobus <Ra.spam-niet@t.k.pl> writes:
>>> #!/bin/sh
>>> zmienna=0
>>> cat plik| while read line
>>> do
>>> echo $line
>>> zmienna=3
>>> done
>>> echo $zmienna
>>>
>>> i niestety na wyjściu (pomijając linie pliku) mam wynik "0" a
>>> chciałbym mieć "3"
>>
>> Czy przepisałeś czy zacytowałeś ten skrypt? Bo obstawiam literówkę w
>> nazwie zmiennej w ciele pętli.
>
> A ja obstawiam, że nie wiesz jak działa sh/bash,
> sam jestem zaskoczony, że tak to działa,
> ale przepisz powyższy skrypt dodając sleep 1
> po zmienna=3 a przed done i wyświetl sobie listę procesów,
> to zobaczysz bash, bash i sleep.

> To dlatego ta zmienna jest ustawiona w pętli
> i poza pętlą w bashu w dalszym ciągu jest 0.

Nie dlatego, że ustawiona w pętli a dlatego, że pętla jest w nowym 
procesie odpalonym przez "|". W tym wypadku usunięcie martwego kota na 
rzecz "<" pomoże.

W ogólnym czasami trzeba użyć named pipe na zasadzie:
cat plik > rurka &

petla < rurka

> Niestety export zmiennej do środowiska też nie pomaga.

Nie jest to dziwne.

-- 
Pozdrawiam
Michoo
Re: bash while done zmienna problem
#72596
Author: Kamil Jońca
Date: Tue, 12 Feb 2013 12:11
20 lines
1562 bytes
PawelS <cbrbob@10g.pl> writes:

[...]
>> Czy przepisałeś czy zacytowałeś ten skrypt? Bo obstawiam literówkę w
>> nazwie zmiennej w ciele pętli.
>
> A ja obstawiam, że nie wiesz jak działa sh/bash,
Masz rację. NIe przyszłoby mi do głowy, że pętla jest nowym procesem.
[...]

> Niestety export zmiennej do środowiska też nie pomaga.
No, nic dziwnego w takiej sytuacji.

KJ

-- 
http://sporothrix.wordpress.com/2011/01/16/usa-sie-krztusza-kto-nastepny/
QOTD:
	"It seems to me that your antenna doesn't bring in too many
	stations anymore."
Re: bash while done zmienna problem
#72597
Author: Stachu 'Dozzie' K.
Date: Tue, 12 Feb 2013 16:36
17 lines
1925 bytes
On 2013-02-12, Kamil Jońca <kjonca@poczta.onet.pl> wrote:
> PawelS <cbrbob@10g.pl> writes:
>
> [...]
>>> Czy przepisałeś czy zacytowałeś ten skrypt? Bo obstawiam literówkę w
>>> nazwie zmiennej w ciele pętli.
>>
>> A ja obstawiam, że nie wiesz jak działa sh/bash,
> Masz rację. NIe przyszłoby mi do głowy, że pętla jest nowym procesem.

Bo nie jest. Ten sam efekt uzyskasz za pomocą instrukcji warunkowej czy
nawet głupiego `echo foo | read bar; echo $bar'. Chodzi o ostatnią
komendę w potoku: w bashu jest uruchamiany podproces, a w takim zsh nie.

-- 
Secunia non olet.
Stanislaw Klekot
Re: bash while done zmienna problem
#72598
Author: Kamil Jońca
Date: Tue, 12 Feb 2013 16:53
22 lines
1885 bytes
"Stachu 'Dozzie' K." <dozzie@go.eat.some.screws.spammer.invalid> writes:

> On 2013-02-12, Kamil Jońca <kjonca@poczta.onet.pl> wrote:
>> PawelS <cbrbob@10g.pl> writes:
>>
>> [...]
>>>> Czy przepisałeś czy zacytowałeś ten skrypt? Bo obstawiam literówkę w
>>>> nazwie zmiennej w ciele pętli.
>>>
>>> A ja obstawiam, że nie wiesz jak działa sh/bash,
>> Masz rację. NIe przyszłoby mi do głowy, że pętla jest nowym procesem.
>
> Bo nie jest. Ten sam efekt uzyskasz za pomocą instrukcji warunkowej czy
> nawet głupiego `echo foo | read bar; echo $bar'. Chodzi o ostatnią
> komendę w potoku: w bashu jest uruchamiany podproces, a w takim zsh nie.

Czyli (w specyficznych warunkach) pętla _jest_ nowym procesem :)
KJ

-- 
http://blogdebart.pl/2009/12/22/mamy-chorych-dzieci/
Your reasoning powers are good, and you are a fairly good planner.
Re: bash while done zmienna problem
#72599
Author: Bartosz Feński aka fEnIo
Date: Tue, 12 Feb 2013 17:45
31 lines
2188 bytes
W artykule Kamil Jońca napisał(a):

>>> [...]
>>>>> Czy przepisałeś czy zacytowałeś ten skrypt? Bo obstawiam literówkę w
>>>>> nazwie zmiennej w ciele pętli.
>>>>
>>>> A ja obstawiam, że nie wiesz jak działa sh/bash,
>>> Masz rację. NIe przyszłoby mi do głowy, że pętla jest nowym procesem.
>>
>> Bo nie jest. Ten sam efekt uzyskasz za pomocą instrukcji warunkowej czy
>> nawet głupiego `echo foo | read bar; echo $bar'. Chodzi o ostatnią
>> komendę w potoku: w bashu jest uruchamiany podproces, a w takim zsh nie.
>
> Czyli (w specyficznych warunkach) pętla _jest_ nowym procesem :)

Warunki są na tyle specyficzne, że autor zabija niepotrzebnego kota.
Wszystko czego mu trzeba to zamiast `cat foo | wile read` konstrukcja
w stylu:

while whatever; do
  [...]
done < foo

pozdr,
fEnIo

-- 
  ,''`.  Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
 : :' :       32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
 `. `'           phone:+48602383548 | proud Debian maintainer and user
   `-            http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: bash while done zmienna problem
#72595
Author: PawelS
Date: Tue, 12 Feb 2013 19:07
33 lines
2028 bytes
Michoo pisze:
> On 12.02.2013 04:52, PawelS wrote:
>> Kamil Jońca pisze:
>>> Tomasz Kobus <Ra.spam-niet@t.k.pl> writes:
>>>> #!/bin/sh
>>>> zmienna=0
>>>> cat plik| while read line
>>>> do
>>>> echo $line
>>>> zmienna=3
>>>> done
>>>> echo $zmienna
>>>>
>>>> i niestety na wyjściu (pomijając linie pliku) mam wynik "0" a
>>>> chciałbym mieć "3"
>>>
>>> Czy przepisałeś czy zacytowałeś ten skrypt? Bo obstawiam literówkę w
>>> nazwie zmiennej w ciele pętli.
>>
>> A ja obstawiam, że nie wiesz jak działa sh/bash,
>> sam jestem zaskoczony, że tak to działa,
>> ale przepisz powyższy skrypt dodając sleep 1
>> po zmienna=3 a przed done i wyświetl sobie listę procesów,
>> to zobaczysz bash, bash i sleep.
> 
>> To dlatego ta zmienna jest ustawiona w pętli
>> i poza pętlą w bashu w dalszym ciągu jest 0.
> 
> Nie dlatego, że ustawiona w pętli a dlatego, że pętla jest w nowym 
> procesie odpalonym przez "|". W tym wypadku usunięcie martwego kota na 
> rzecz "<" pomoże.
Czyż właśnie tego nie napisałem ?
2 x bash (ten drugi bash to właśnie to co jest za pipe)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads