staging.inyokaproject.org

Wie geht eine übergreifende Zuweisung einer Umgebungsvariablen?

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 744

mal probiert.., (.bashrc nicht probiert)

echo "export progsta=willi" >> $HOME/.profile

anderes Terminal

source ~/.profile
echo $progsta
echo "export progsta=willi2" >> $HOME/.profile

anderes Terminal

source ~/.profile
echo $progsta

(source ~/.profile an echo angehangen wollte nicht.)

echo u. source ~/.profile könnte man gekürzelt als alias ablegen.(var+wert von ZWA lesen)

(~/.profile ab und zu säubern, oder vor dem schreiben automatisch ersetzen)

–

Ist nicht ernstzunehmen, war nur etwas Probiererei zur NachMittagszeit.

juribel

Anmeldungsdatum:
20. April 2014

Beiträge: 1269

Nicht dass ich wüsste. Der Aufruf von Skripten mit dem Punkt-Befehl ist der normale Weg. Wie schon geschrieben, können Kind-Prozesse keine Variablen an den Eltern-Prozess zurückreichen.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

Hartmut2 schrieb:

[…] Gibt es denn keine andere Möglichkeit, in einem Shell-Script eine Umgebungsvariable so zu setzen, sodaß dieser Wert auch noch nach dem Ende des Shell-Scripts in dem Terminal gilt, in dem das Shell-Script gestartet wurde?

So ist es. Umgebungsvariablen werden immer nur an die Nachkommen vererbt, niemals an die Vorgänger. Wenn ein Kind etwas seinem Erzeuger vererben will, muss es die Informationen an einer vereinbarten Stelle (Datei) hinterlegen und der Erzeuger muss aktiv die Daten abholen bzw. zur Kenntnis nehmen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Hartmut2 schrieb:

Frage: wie setze ich in einem Shell-Script eine Umgebungsvariable, sodaß dieser Wert auch noch nach dem Ende des Shell-Scripts in dem Terminal gilt, in dem das Shell-Script gestartet wurde?

juribel schrieb:

Indem du sie exportierst, wie user_unknown in seinem letzten Post beschrieb.

Ich glaube, hier liegt ein Missverständnis vor: was juribel schreibt, stimmt für Kinder der Shell. Aber die Frage war ja die Variable ans Terminal zu binden. Das geht so nicht. Da muss man so einen Mechanismus haben, wie das Sourcen beim Starten einer Shell. Ich wüsste nicht, wie man Variablen in einer laufenden Shell automatisch aktualisieren kann. Bei interaktiver bash ginge das am ehesten noch via PROMPT_COMMAND, das eine Liste von Kommandos enthält, die vor der Ausgabe des nächsten Prompts ausgeführt werden. Das könnte man nutzen um die Umgebungsdatei neu zu sourcen.

Marant--

Anmeldungsdatum:
4. April 2022

Beiträge: 744

Ich möchte in einer Batchfile (*.sh) einer neuen oder schon existierenden Umgebungsvariablen einen Wert zuweisen, aber so, daß dieser Wert auch in allen anderen Terminals zur Verfügung steht

Also ich habe mein Test mal in neuen und existierenden Terminals probiert. Bei mir geht's. Voraussetzung ist

source ~/.profile

im betreffenden(wo var neu gesetzt werden soll) Terminal.

Hartmut2

(Themenstarter)

Anmeldungsdatum:
11. Oktober 2018

Beiträge: Zähle...

Danke an alle für Eure neuen Antworten und Eure Hilfe. Die Idee mit dem Alias von Marant war genial. Ich habe einfach definiert:

alias progsta='source progsta.sh'

und jetzt kann ich weder das "source" vergessen und das ".sh" brauche ich auch nicht mehr zu tippen ☺

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

Hartmut2 schrieb:

Danke an alle für Eure neuen Antworten und Eure Hilfe.

Bitte.

Die Idee mit dem Alias von Marant war genial.

Mit Verlaub, da waren andere eher.

alias progsta='source progsta.sh'

und jetzt kann ich weder das "source" vergessen und das ".sh" brauche ich auch nicht mehr zu tippen ☺

Du solltest den absoluten Pfad zu progsta.sh in dem Alias verwenden, sonst geht es nicht, wenn Du das Verzeichnis wechselst. Es sei denn, Du willst in verschiedenen Verzeichnissen verschiedene Dateien dieses Namens ablegen. Du kannst es auch mit einer Shell-Funktion etwas flexibler machen, so dass er eine lokale Datei nimmt und auf die im Home zurückgreift, falls die nicht existiert:

1
2
3
4
5
6
7
8
9
progsta() {
if [ -r progsta.sh ]; then
  . progsta.sh
elif [ -r ~/progsta.sh ]; then
  . ~/progsta.sh
else
  echo 'no progsta.sh'
fi
}

Einfach in die ~/.bash_aliases packen.

Antworten |