Ondersteuning > Programmeren

probleem met bash scipt

(1/2) > >>

Eduard2:
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é


Bloom:
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):

--- Code: ---. ./pico.sh

--- Einde van code ---
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.

Eduard2:
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

Bloom:
In een terminal:

--- Code: ---help .
help source

--- Einde van code ---
.: . 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.

henkoegema:

--- Citaat van: Bloom 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):

--- Code: ---. ./pico.sh

--- Einde van code ---
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.

--- Einde van citaat ---

Ook ik heb hier weer van geleerd.   :)

Navigatie

[0] Berichtenindex

[#] Volgende pagina

Naar de volledige versie