Napisz polecenie w jednym terminalu, zobacz wynik na drugim

35

Chcę uruchomić polecenie foo na jednym terminalu i przekazać wynik do innego terminala. Czy można to zrobić?

Mohammad Reza Rezwani
źródło
4
Spójrz także na tmux i screen , które pozwalają przejąć, wykonać kopię lustrzaną lub po prostu wykonać polecenia w innych sesjach.
Kevin

Odpowiedzi:

46

Tak to jest. Obraz wart tysiąca słów:

terminal radu

Musisz przekierować dane wyjściowe polecenia za pomocą >operatora do /dev/pts/#. Możesz znaleźć #za pomocą wholub wpolecenia. Jeśli chcesz przekierować i błędy, użyj:

<command> >& /dev/pts/#
Radu Rădeanu
źródło
dzięki. ale jeśli inny terminal nie istnieje. co powinniśmy zrobić? Lub lepiej powiedzieć, przekazać to nowszemu?
Mohammad Reza Rezwani,
5
Prawdopodobnie potrzebujesz do tego skryptu: skrypt przyjmie jako argument twoje polecenie, a następnie otworzy nowy gnome-terminali wykryje tty (za pomocą ttypolecenia) nowego terminala, a na koniec wyśle ​​do niego dane wyjściowe.
Radu Rădeanu,
8

Coś takiego dla twojego $HOME/.bashrc:

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

Uruchomi to polecenie i wyświetli wynik w nowym oknie terminala.

Przykłady:

ng ls -l
ng echo foo

Edycja: Aby wziąć pod uwagę aliasy, $HOME/.bashrcużyj tego zamiast tego:

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

następnie wyjście lspowinno być pokolorowane (dzięki Radu Rădeanu za tę podpowiedź ).

TuKsn
źródło
Spowoduje to uruchomienie polecenia bezpośrednio w nowym terminalu.
Radu Rădeanu,
Tak, ale jaka jest zaleta uruchomienia go najpierw w starym terminalu?
TuKsn
Brak korzyści ... ale w rzeczywistości ta odpowiedź na ten komentarz .
Radu Rădeanu,
4
Zrozumiesz, czy uciekniesz, type lsa potem ng type ls:)
Radu Rădeanu,
1
jeśli funkcja zapisu w jednym wierszu w bashrc, może potrzebować średnika, aby go zakończyć, lub napotkasz błąd „nieoczekiwany koniec pliku”. tak ng() { gnome-terminal -x sh -c "$*; bash" ;}powinno być lepiej. A jeśli używasz xfce (xfce4-terminal jako domyślny emulator): ng() { xfce4-terminal -x sh -c "$*; bash" ;}lub możesz po prostu uruchomić dowolny domyślny emulatorng() { x-terminal-emulator -x sh -c "$*; bash";}