Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.os.unix.shell > #14679
| From | Thomas Dorner <dcous260417.dorner@spamgourmet.com> |
|---|---|
| Newsgroups | de.comp.os.unix.shell |
| Subject | Re: bash - while |
| Date | 2026-04-17 18:28 +0200 |
| Message-ID | <6eo6jhmu03.fsf@th-dorner.de> (permalink) |
| References | <1j0abm-amjl.ln1@ardbeg.whisky.at.home> <slrn10u4lvt.3h1ug.hjp-usenet4@trintignant.hjp.at> |
"Peter J. Holzer" <hjp-usenet4@hjp.at> writes:
> On 2026-04-17 17:35, Michael Schütz <der.schultze@web.de> wrote:
>> Die Variable "trallala" wird bei jedem Schleifendurchgang um die Eingabe
>> erweitert und nach dem 'done' kann die Variable weiter genutzt werden.
>>
>> Das funktioniert nicht:
>> trallala=""
>> echo -e "etc\nsdf\nkji"|while read L;do
>> if [[ ! "${L}" = "" ]];then
>> trallala=$(sed "s/$/$L, /" <<< ${trallala})
>> echo ${trallala}
>> else break
>> fi
>> done
>> echo "Ende: ${trallala}"
>>
>> Innerhalb der Schleife ist das Verhalten, wie oben, aber nach dem
>> 'done' ist die Variable leer.
>>
>> Warum ist das so
>
> Weil da eine Pipe im Spiel ist und Pipes verbinden verschiedene
> Prozesse. Von den beiden Teilen der Pipe ‹echo ...› und ‹while read ...›
> kann also maximal einer im Hauptprozess des Scripts abgehandelt werden
> und der zweite muss notwendigerweise in einem Kindprozess laufen.
> Variablenzuordnungen im Kindprozess haben aber keine Auswirkungen auf
> den Parent und verschwinden, sobald der Kindprozess terminiert.
>
> Bei der Bash und der Dash wird der erste Teil der Pipe im Parent
> abgehandelt, alle anderen in Kindprozessen. Ich glaube, das ist auch
> POSIX-Standard, bin aber gerade zu faul zum Nachschlagen.
>
>> und wie kann ich das umgehen?
>
> Du könntest die zsh verwenden. Bei der wird der letzte Teil der Pipe im
> Parent abgehandelt, was meistens praktischer ist.
>
> Sonst musst Du das Script so umstrukturieren, dass die Schleife nicht an
> der zweiten Stelle einer Pipe steht.
Oder in der BaSH einfach
shopt -s lastpipe
Viele Grüße, Thomas
--
Adresse gilt nur kurzzeitig!
Back to de.comp.os.unix.shell | Previous | Next — Previous in thread | Next in thread | Find similar
bash - while Michael Schütz <der.schultze@web.de> - 2026-04-17 17:35 +0200
Re: bash - while "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2026-04-17 17:55 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-17 18:43 +0200
Re: bash - while Thomas Dorner <dcous260417.dorner@spamgourmet.com> - 2026-04-17 18:28 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-18 00:26 +0200
Re: bash - while Christian Weisgerber <naddy@mips.inka.de> - 2026-04-18 00:45 +0000
Re: bash - while Ulli Horlacher <framstag@rus.uni-stuttgart.de> - 2026-04-18 07:14 +0000
Re: bash - while Helmut Waitzmann <nn.throttle@erine.email> - 2026-04-18 14:03 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-18 10:08 +0200
Re: bash - while Christian Weisgerber <naddy@mips.inka.de> - 2026-04-17 20:22 +0000
Re: bash - while Helmut Waitzmann <nn.throttle@erine.email> - 2026-04-18 14:00 +0200
Re: bash - while Helmut Waitzmann <nn.throttle@erine.email> - 2026-04-18 12:07 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-18 21:11 +0200
csiph-web