Wie kann ich unter Scientific Linux ein Skript erstellen, das ein Terminalfenster öffnet, darin Befehle ausführt und geöffnet bleibt?

Wie kann ich unter Scientific Linux ein Skript erstellen, das ein Terminalfenster öffnet, darin Befehle ausführt und geöffnet bleibt?

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 bashvor der Verwendung geschrieben habe python3 my_app.py. Es scheint, dass nach der Verwendung bashdie Datei .bashrc in meinem Home-Verzeichnis verwendet wird und die Variable $PATHmeiner Version von Python3 Priorität einräumt (ich habe überprüft, dass dies vor und nach dem Schreiben in das Terminal $PATHunterschiedlich 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 -cBefehls 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/python3statt 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'"

verwandte Informationen