Escreva o comando em um terminal, veja o resultado em outro

35

Eu quero executar um comando foo em um terminal e passar o resultado para outro terminal. É possível fazer isso ?

Mohammad Reza Rezwani
fonte
4
Observe também o tmux e a tela , os quais permitem assumir, espelhar ou apenas executar comandos em outras sessões.
Kevin

Respostas:

46

Sim. Uma imagem vale mais que mil palavras:

terminal do radu

Portanto, você deve redirecionar a saída do seu comando usando o >operador para /dev/pts/#. Você pode encontrar #usando whoou wcomando. Se você deseja redirecionar e os erros, use:

<command> >& /dev/pts/#
Radu Rădeanu
fonte
obrigado. mas se o outro terminal não existir. o que devemos fazer? Ou melhor, dizer: passe para um mais novo?
Mohammad Reza Rezwani
5
Você provavelmente precisará de um script para fazer isso: o script terá como argumento seu comando, então deverá abrir um novo gnome-terminale detectar o tty (usando o ttycomando) do novo terminal e, finalmente, enviar a saída para ele.
Radu Rădeanu
8

Algo assim para o seu $HOME/.bashrc:

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

Isso executará um comando e mostra o resultado em uma nova janela do terminal.

Exemplos:

ng ls -l
ng echo foo

Editar: para considerar aliases do $HOME/.bashrcuso isto:

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

então a saída de lsdeve ser colorida (obrigado a Radu Rădeanu por esta dica ).

TuKsn
fonte
Isso executará o comando diretamente no novo terminal.
Radu Rădeanu
Sim, mas qual é a vantagem de executá-lo primeiro no terminal antigo?
12774 TuKsn em
Nenhuma vantagem ..., mas na verdade esta resposta a este comentário .
Radu Rădeanu
4
Você vai entender se você vai correr type lse depois ng type ls:)
Radu Rădeanu
1
se a função write estiver em uma linha no bashrc, talvez seja necessário um ponto-e-vírgula para finalizá-la ou você encontrará um erro "fim inesperado de arquivo". então ng() { gnome-terminal -x sh -c "$*; bash" ;}deveria ser melhor. E se você estiver usando o Xfce (xfce4-terminal como emulador padrão): ng() { xfce4-terminal -x sh -c "$*; bash" ;}ou você pode simplesmente executar por qualquer emulador padrãong() { x-terminal-emulator -x sh -c "$*; bash";}