Neue Konsole aus Skript öffnen, Befehl ausführen und nach Abschluss interaktiv werden

Neue Konsole aus Skript öffnen, Befehl ausführen und nach Abschluss interaktiv werden

Ich möchte ein Skript (das beim Start ausgeführt wird) zum Öffnen eines konsoleTerminals verwenden können.
Wenn es geöffnet wird, soll es einige dauerhafte Dinge tun (wie das Ändern des Verzeichnisses und der bashrc-Quelle) und ein Programm mit langer Laufzeit ausführen.
Wenn das Programm abstürzt oder ich es betrete <ctrl+c>, soll es beginnen, Befehle von der Standardeingabe anzunehmen (wie „Up-Enter“, um es erneut zu versuchen, als ob es die ganze Zeit interaktiv gewesen wäre).

Ich habe so vieles probiert, um es zum Laufen zu bekommen (aktuell versuche ich, es zum Laufen zu bringen lsund nach Abschluss wieder auf interaktiv umzustellen);

konsole -e ls
konsole --hold ls
konsole -e /bin/bash -c ls
konsole --hold -e "/bin/bash -c ls"
konsole -e "/bin/bash -i -c ls"
konsole -e /bin/bash -i -c ls
konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

echo ls > /tmp/konsolebash
konsole -e "/bin/bash -i --rcfile /tmp/konsolebash"

Hat es etwas mit den Anführungszeichen zu tun? Sollte ich sie nicht verwenden, sollte ich etwas umgehen?
Soll ich überhaupt versuchen, es auszuführen bash?
Mir gehen die Ideen aus, aber ich hoffe, es ist überhaupt machbar (aber hoffentlich nicht etwas peinlich Einfaches, das ich übersehen habe).

Ich werde Antworten hochstimmen, die erfolgreich andere Terminalemulatoren verwenden, wenn konsoledas Problem insbesondere besteht (aber da es in der Frage speziell um geht, konsoleglaube ich nicht, dass ich Ihnen das saftige Häkchen geben kann).

Antwort1

Dank der Kommentare von @n.st habe ich diesen Einzeiler verfasst:

konsole -e /bin/bash --rcfile <(echo "cd /;ls;echo hi | less")

Dies ist lediglich eine kürzere Version ohne temporäre Dateien, die die Bash-Prozessersetzung für Folgendes verwendet:

echo "cd /;ls;echo hi | less" > /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

Dadurch werden einige Befehle ausgeführt, angezeigt, die Umgebung geändert, ein lang laufendes Programm ausgeführt ( less) und wenn es endet ( :q) ist interaktiv.
Ersetzen Sie also cd /;ls;echo hi | less(die Demonstration) durch Ihr Skript.

Kein Verlauf, aber zumindest befinden Sie sich jetzt im richtigen Verzeichnis und haben alle Umgebungsvariablen eingerichtet, die Sie möglicherweise wollten.


Im Grunde dasselbe wie mein vorheriger Versuch;

konsole -e "echo ls > /tmp/konsolebash;/bin/bash -i --rcfile /tmp/konsolebash"

außer dass das Schreiben der Datei außerhalb der konsoleAusführung erfolgt, ich habe das Flag gelöscht -iund die Ausführungsparameter befinden sich nicht in einem Anführungszeichenblock


Leider --rcfileführt der Schalter dazu, dass Ihr Computer ~/.bashrcfür diese Befehle nicht geladen wird. Wenn Sie also einen Alias ​​oder etwas Ähnliches benötigen, müssen Sie dies tun.

cat ~/.bashrc > /tmp/konsolebash; echo "commands" >> /tmp/konsolebash;konsole -e /bin/bash --rcfile /tmp/konsolebash

Das kopiert dann einfach Ihre Bashrcfügt hinzudeine Befehle bis zum Ende

Antwort2

Eine kürzere und einfachere Lösung:

konsole -e '$SHELL -c "ls; $SHELL"' &

Auch hier gibt es keine Probleme mit Verlauf oder Sourcing .bashrc. Wenn Ihre $SHELLUmgebungsvariable nicht auf Bash verweist, können Sie sie manuell angeben.

Dadurch wird eine zweite (Bash-)Shell im selben Terminalfenster geöffnet, sodass einige Dinge aus dem ersten Befehl möglicherweise nicht übernommen werden.

Antwort adaptiert von einem AskubuntuAntwort.

verwandte Informationen