Ich versuche, programmgesteuert ein neues Terminal zu öffnen und automatisch ein benutzerdefiniertes Skript auszuführen, das verschiedene Umgebungsvariablen festlegt, um es für eine interaktive Sitzung vorzubereiten. Das funktioniert alles einwandfrei, außer dass das resultierende Terminal nicht bearbeitet werden kann, d. h. es gibt keinen Cursor. Mein aktueller Versuch sieht folgendermaßen aus:
konsole -hold -e /path/to/bash/script/run_oenv.sh
wobei run_oenv.sh
es wie folgt aussieht (für einfache Tests):
echo hello world
export FOO=bar
Beim Ausführen wird der obige Befehl run_oenv.sh
erfolgreich ausgeführt und ich sehe die erwartete Debug-Anweisung im neuen Terminal, aber ich kann einfach nicht herausfinden, wie ich das neue Terminal interaktiv machen kann. Was übersehe ich?
Letztendlich muss das Bash-Skript mehr tun, als nur Umgebungsvariablen festzulegen, aber dies ist der einfachste Testfall.
Dies ist auf Centos 7/KDE.
Antwort1
Bei Verwendung -e
eines Terminalemulators zur Ausführung eines Befehls führt dieser den Befehl ausstattdessender Shell, die es gestartet hätte. Das bedeutet, dass es Ihr Skript ausführt und dann nichts anderes.
Wenn Sie eine interaktive Shell starten möchten bash
, die Ihre Datei als Quelle verwendet, verwenden Sie bash
die --rcfile
entsprechende Befehlszeilenoption:
konsole -hold -e bash --rcfile /path/to/bash/script/run_oenv.sh
Beachten Sie, dass diesbash
nichtLesen Sie die ~/.bashrc
Datei. Wenn Sie dennoch source möchten ~/.bashrc
, wie es normalerweise in interaktiven Shell-Sitzungen der Fall ist, würden Sie dies von Ihrem run_oenv.sh
Code aus tun:
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
oder ohne die Kurzschlusssyntax,
if [ -f "$HOME/.bashrc" ]; then
source "$HOME/.bashrc"
fi
(wahrscheinlich am Anfang der run_oenv.sh
Datei, damit Ihre Datei alle Variablen oder Einstellungen in überschreibt ~/.bashrc
)