Ich habe Variablen /etc/bashrc
wie folgt definiert:
export VAR1=yadayada
runner.sh
Ich 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.sh
der Inhalt:
#!/bin/bash
exec /home/john/run_test.sh
Beim Starten runner.sh
aus der Shell erhalte ich die Fehlermeldung, dass die Umgebungsvariable nicht definiert ist.
Wenn ich dasselbe runner.sh
von 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“ bashrc
und 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