Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: probleem met bash scipt  (gelezen 4320 keer)

Offline Eduard2

  • Lid
probleem met bash scipt
« Gepost op: 2022/01/07, 12:20:12 »
Beste forumleden,

Als nieuwe deelnemer wil ik me even voorstellen. Ik ben Eduard Hontelé en woon in de buurt van Antwerpen. Na mijn pensioen mag ik zelf kiezen met welk OS wordt gewerkt. Omdat ik met microcontrollers bezig ben werd het linux. Sinds meer dan 10 jaar gebruik ik Ubuntu maar ik ben geen professioneel programmeur.

Heeft iemand een idee wat er met mijn script fout gaat ?  Tussen de sterretjes staat  het script:
*****************************************************
#!/bin/bash
echo "hallo"
export PICO_SDK_PATH=/home/eduard/pico/pico-sdk
****************************************************

Als ik de regel  "export PICO_SDK_PATH=/home/eduard/pico/pico-sdk " buiten een script intik werkt alles zoals het hoort. 
 
Plaats is die regel in een script dan lijkt het alsof de export niet wordt uitgevoerd. Toch wordt het script doorlopen want de echo "hallo" verschijnt op scherm.
Even dacht ik aan gebruikersgroep en rechten. Zelfs met chmod 777 lukt het niet.

Wie weet wat ik fout doe?

Deze vraag kadert in een "doe boek" dat ik probeer onder de knie te krijgen.  De titel is "RP2040 assembly language programming" van auteur Stephen Smith.

Op voorhand bedankt voor uw hulp.

Eduard Hontelé



Offline Bloom

  • Lid
Re: probleem met bash scipt
« Reactie #1 Gepost op: 2022/01/07, 12:52:13 »
Het systeem start een subshell om je script uit te voeren. De export werkt en genereert een globale variabele binnen die subshellomgeving. Maar als het script eindigt wordt ook de subshell afgesloten en verdwijnt dus die geëxporteerde variabele.
De truc is het systeem te vertellen geen subshell te starten maar het script in de huidige shell uit te voeren.
Start het script dus als volgt (ik veronderstel even dat het pico.sh heet):
. ./pico.sh
Als je nu echo $PICO_SDK_PATH tikt, zul je effectief de verwachte waarde zien.
Dit eerste punt is hetzelfde als het 'source'-bevel. Het laadt een script in dezelfde omgeving om het dan uit te voeren.

Offline Eduard2

  • Lid
Re: probleem met bash scipt
« Reactie #2 Gepost op: 2022/01/07, 13:32:31 »
Bedankt Bloom,

Uw methode werkt als een fluitje van een cent. De auteur raadt aan enkele kleine scripts te schrijven om lange, regelmatig weerkerende, instructies te vermijden bij de voorbeelden uit zijn boek.
Ik begrijp uw uitleg over het subscript. Het gedoe met de twee puntjes met daartussen een spatie is nieuw voor mij. Waar kan ik daarover een leesbare uitleg vinden? Courant Engels of frans is geen probleem.  De man pagina's in het linux zijn  moeilijk te begrijpen.  Ik vergelijk het met een wettekst of een bestek van een overheidsbedrijf. 99,999... % correct maar zo moeilijk te lezen.

Vriendelijke groeten,

Eduard

Offline Bloom

  • Lid
Re: probleem met bash scipt
« Reactie #3 Gepost op: 2022/01/07, 13:59:27 »
In een terminal:
help .
help source
.: . BESTANDSNAAM [ARGUMENTEN]
source: source BESTANDSNAAM [ARGUMENTEN]
    Opdrachten uit bestand in de huidige shell uitvoeren.
    Leest opdrachten uit het gegeven bestand en voert deze uit in de huidige
    shell.  De mappen in PATH worden nagezocht om het genoemde bestand te
    vinden.  Als er verder nog argumenten gegeven zijn, dan worden dit de
    positionele parameters tijdens de uitvoering van het genoemde bestand.

    De afsluitwaarde is die van de laatst uitgevoerde opdracht in het gegeven
    bestand, of 1 als dit bestand niet gelezen kan worden.

Re: probleem met bash scipt
« Reactie #4 Gepost op: 2022/01/07, 14:19:37 »
Het systeem start een subshell om je script uit te voeren. De export werkt en genereert een globale variabele binnen die subshellomgeving. Maar als het script eindigt wordt ook de subshell afgesloten en verdwijnt dus die geëxporteerde variabele.
De truc is het systeem te vertellen geen subshell te starten maar het script in de huidige shell uit te voeren.
Start het script dus als volgt (ik veronderstel even dat het pico.sh heet):
. ./pico.sh
Als je nu echo $PICO_SDK_PATH tikt, zul je effectief de verwachte waarde zien.
Dit eerste punt is hetzelfde als het 'source'-bevel. Het laadt een script in dezelfde omgeving om het dan uit te voeren.

Ook ik heb hier weer van geleerd.   :)
Miscere utile dulci. (Ter leering ende vermaeck)
http://henk.oegema.com  (Op RaspberryPi2)
Registered linux user 520520.  In gebruik: Ubuntu  22.04.4 Hobby's: Radio Amateur callsign: PA2HO.  Interesses: Raspberry Pi & Arduino & Jetson Nano (voor AI & ML)

Offline Eduard2

  • Lid
Re: probleem met bash scipt
« Reactie #5 Gepost op: 2022/01/07, 16:33:20 »
@bloom: Ik mis een formele opleiding in het linux.  Stukje bij beetje worden wat vaardigheden verworven. Vandaag weer bijgeleerd. Nooit van de help instructie gehoord. Nogeens bedankt voor de hulp.

@Henk: We zijn beiden in een andere tak van de radiohobby aan het sleutelen.  Mijn hobby is oude toestellen in de MG en LG  band spelende te houden . Met de Rpi3B+ lukt dat goed maar de Spartan6 FPGA die daarmee samenwerkt zal pas over 3 jaar weer beschikbaar zijn. De onderdelen crisis is niet langer een ver van mijn bed show en treft nu ook de amateur.

Vriendelijke groeten,

Eduard