Ich arbeite auf einem Remote-Server, der Scientific Linux (Version = 7.6 (Nitrogen)) verwendet. Ich habe eine einfache Webanwendung in Python3 erstellt und ständig ein Mate-Terminal geöffnet (obwohl jedes Terminal funktioniert) und geschrieben
bash
python3 my_app.py
So kann ich lokal in meinem Browser überprüfen, ob meine App funktioniert.
Ich möchte dies einfacher machen und einfach auf ein Shell-Skript klicken, das ein Terminalfenster öffnet und die genannten Befehle ausführt. Danach sollte das Terminalfenster geöffnet bleiben und ich sollte meine Webanwendung im Browser überprüfen können.
Ich habe ein Shell-Skript mit dieser Zeile geschrieben:
gnome-terminal --tab --title="tab 1" --command="bash -c 'python3 my_app.py; $SHELL'"
Wie hier im Fall von Ubuntu empfohlen:https://askubuntu.com/questions/46627/wie-kann-ich-ein-Skript-erstellen-das-Terminal-Windows-öffnet-und-Befehle-im-ausführt (Hinweis: Ich habe alle anderen Antworten ausprobiert und sie haben nicht funktioniert. Die Antwort von Gabriel Staples war die einzige, die fast funktioniert hat.) Ich habe auch zugelassen, dass die Datei als Programm ausgeführt wird.
Diese Lösung hat zwei Probleme. Erstens bleibt das Terminal nicht geöffnet. Zweitens erhalte ich beim Klicken auf die Datei die folgende Meldung (bevor das Terminal geschlossen wird): ModuleNotFoundError: No module named 'flask'
. Das liegt daran, dass das Skript auf diesem Server die falsche Version von Python3 verwendet. Es gibt eine vom Administrator installierte Version und die von mir in meinem Home-Verzeichnis installierte Anaconda-Version. Ich habe dieses Problem umgangen, indem ich bash
vor der Verwendung geschrieben habe python3 my_app.py
. Es scheint, dass nach der Verwendung bash
die Datei .bashrc in meinem Home-Verzeichnis verwendet wird und die Variable $PATH
meiner Version von Python3 Priorität einräumt (ich habe überprüft, dass dies vor und nach dem Schreiben in das Terminal $PATH
unterschiedlich ist ).bash
Ich habe mich gefragt, ob es eine Möglichkeit gibt, ein Skript (unter Scientific Linux) zu erstellen, das ein Terminalfenster öffnet, darin Befehle ausführt und danach geöffnet bleibt.
Ich habe mich auch gefragt, ob es eine Möglichkeit gibt, dass die Webanwendung danach automatisch in meinem Browser angezeigt wird.
Antwort1
Das Terminal wird geschlossen, nachdem der Befehl abgeschlossen ist. Um das Terminal geöffnet zu lassen, verhindere ich im Allgemeinen die Ausführung des Skripts, z. B. mit einer Eingabeaufforderung wie folgt:
while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done
Fügen Sie dies daher für Ihr Skript an das Ende des bash -c
Befehls an.
gnome-terminal --tab --title="tab 1" --command="bash -c 'python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"
Wenn das falsche Python verwendet wird, können Sie entweder laden~/.bashrc
durch die Nutzung bash -i
, oder Sie können die Python-Version in Ihrem Befehl explizit mit /path/to/python3
statt mit plain angeben.python3
Ihr letzter Befehl lautet daher entweder
gnome-terminal --tab --title="tab 1" --command="bash -ci 'python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"
oder
gnome-terminal --tab --title="tab 1" --command="bash -c '/path/to/python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"