Schreibbefehl in ein Terminal, siehe Ergebnis auf dem anderen

35

Ich möchte einen Befehl foo auf einem Terminal ausführen und das Ergebnis an ein anderes Terminal übergeben. Ist das möglich?

Mohammad Reza Rezwani
quelle
4
Schauen Sie sich auch tmux und screen an , mit denen Sie Befehle für andere Sitzungen übernehmen, spiegeln oder einfach ausführen können.
Kevin

Antworten:

46

Ja ist es. Ein Bild, das mehr als tausend Worte sagt:

Radus Terminal

Sie müssen also die Ausgabe Ihres Befehls mithilfe des >Operators an umleiten /dev/pts/#. Sie können #mit whooder wBefehl finden. Wenn du und die Fehler umleiten willst, benutze:

<command> >& /dev/pts/#
Radu Rădeanu
quelle
Vielen Dank. aber wenn das andere terminal nicht existiert. was wir tun sollten? Oder besser gesagt, es an eine neuere weitergeben?
Mohammad Reza Rezwani
5
Dazu benötigen Sie wahrscheinlich ein Skript: Das Skript verwendet Ihr Kommando als Argument, sollte dann ein neues öffnen gnome-terminalund das tty (using- ttyKommando) des neuen Terminals erkennen und schließlich die Ausgabe an dieses senden.
Radu Rădeanu
8

So etwas für Ihre $HOME/.bashrc:

ng() { gnome-terminal -x sh -c "$*; bash"; }

Dadurch wird ein Befehl ausgeführt und das Ergebnis in einem neuen Terminalfenster angezeigt.

Beispiele:

ng ls -l
ng echo foo

Bearbeiten: Um Aliase aus der $HOME/.bashrcVerwendung zu berücksichtigen, verwenden Sie stattdessen Folgendes :

ng() { gnome-terminal -x bash -ic "$*; bash"; }

dann sollte die Ausgabe von lsfarbig sein (danke an Radu Rădeanu für diesen Hinweis ).

TuKsn
quelle
Dadurch wird der Befehl direkt im neuen Terminal ausgeführt.
Radu Rădeanu
Ja, aber was ist der Vorteil, wenn Sie es zuerst im alten Terminal ausführen?
TuKsn
Kein Vorteil ..., aber in der Tat diese Antwort auf diesen Kommentar .
Radu Rădeanu
4
Sie werden verstehen, wenn Sie laufen type lsund dann ng type ls:)
Radu Rădeanu
1
Wenn Sie eine Funktion in eine Zeile in bashrc schreiben, benötigen Sie möglicherweise ein Semikolon, um sie zu beenden, oder Sie werden auf einen Fehler "Unerwartetes Dateiende" stoßen. so ng() { gnome-terminal -x sh -c "$*; bash" ;}sollte es besser sein. Und wenn Sie xfce (xfce4-terminal als Standardemulator) verwenden: ng() { xfce4-terminal -x sh -c "$*; bash" ;}oder Sie können einfach einen Standardemulator verwendenng() { x-terminal-emulator -x sh -c "$*; bash";}