"konsole -e" führt zu einem schreibgeschützten Terminal

"konsole -e" führt zu einem schreibgeschützten Terminal

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.shes wie folgt aussieht (für einfache Tests):

echo hello world
export FOO=bar

Beim Ausführen wird der obige Befehl run_oenv.sherfolgreich 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 -eeines 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 bashdie --rcfileentsprechende Befehlszeilenoption:

konsole -hold -e bash --rcfile /path/to/bash/script/run_oenv.sh

Beachten Sie, dass diesbash nichtLesen Sie die ~/.bashrcDatei. 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.shCode 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.shDatei, damit Ihre Datei alle Variablen oder Einstellungen in überschreibt ~/.bashrc)

verwandte Informationen