Umgebungsvariablen, die in bashrc definiert wurden, sind für /bin/bash nicht zugänglich

Umgebungsvariablen, die in bashrc definiert wurden, sind für /bin/bash nicht zugänglich

Ich habe Variablen /etc/bashrcwie folgt definiert:

export VAR1=yadayada

runner.shIch habe ein Bash-Skript mit dem folgenden Code aufgerufen => wir führen dort ein anderes Skript aus run_test.sh, das ein Python-Skript startet. Das Python-Skript verwendet die oben erwähnte Umgebungsvariable.

Hier ist runner.shder Inhalt:

#!/bin/bash
exec /home/john/run_test.sh

Beim Starten runner.shaus der Shell erhalte ich die Fehlermeldung, dass die Umgebungsvariable nicht definiert ist.

Wenn ich dasselbe runner.shvon Crontab aus starte und die Umgebungsvariable auch in der Crontab definiert ist, läuft alles richtig.

Können Sie bitte erklären, warum wir beim Shell-Ausführen die Umgebungsvariable nicht „sammeln“ bashrcund wie das behoben werden kann?

Antwort1

Versuche dies,

Nachdem Sie die Datei /etc/bashrc bearbeitet haben (übrigens, welche Linux-Version verwenden Sie? Ich selbst lege solche Dinge normalerweise in ~/.bashrc ab), versuchen Sie, den folgenden Befehl auszuführen

source /etc/bashrc

und führen Sie dann Ihr Skript runner.sh aus.

Führen Sie nun die

set

Befehl, um zu sehen, ob die Umgebungsvariable in der Liste angezeigt wird.

Antwort2

Ich habe versucht, dasselbe zu tun wie Sie, es funktioniert auf meinem System einwandfrei. Wie versuchen Sie, mit Python auf die Umgebungsvariablen zuzugreifen? Stellen Sie sicher, dass Python die Methode os.environ verwendet.

Überprüfen Sie zuerst die Umgebungsvariablen

[john@tilki ~]$ grep VAR /etc/bashrc
export VAR1=bla
[john@tilki ~]$ env | grep VAR
VAR1=bla

Inhalt der Skripte

[john@tilki ~]$ cat runner.sh
#! /bin/bash

echo $VAR1

python  print_var.py
[john@tilki ~]$ cat print_var.py
import os

print os.environ['VAR1']

Führen Sie das Skript runner.sh aus.

[john@tilki ~]$ ./runner.sh
bla
bla

verwandte Informationen