Como abrir um novo terminal, executar um processo nesse terminal e canalizar para o processo?

2

O que eu gostaria de fazer basicamente é uma versão de nova janela de less . Há muito tempo atrás, havia uma ferramenta chamada gless que fazia exatamente isso. Por exemplo

cat my_very_long_file | gless

abriria uma nova janela e executaria um paginador less -like mostrando meu arquivo muito longo; o terminal do qual eu ligo o comando ficaria limpo.

gless não está disponível em sistemas mais novos. A alternativa mais próxima que encontrei é gview - (praticamente gvim no modo somente leitura, lendo a entrada padrão), mas essa não é a coisa exata; ele lê todo o stdin antes de exibir qualquer coisa, então não é bom para grandes entradas.

Eu pensei em executar um novo terminal ( xterm , konsole ou qualquer coisa) com less como o comando inicial. Mas não funciona do jeito que eu quero; Eu gostaria de fazer algo parecido com

cat my_very_long_file | xterm -e less

Mas o xterm e todos os outros terminais não parecem passar sua entrada padrão para o processo que executam - a nova janela é aberta, mas desaparece imediatamente.

(Eu sei que posso iniciar o comando no novo terminal; mas não é o que eu quero. Eu realmente quero executar um comando no shell atual e redirecionar para um novo processo. cat é apenas um exemplo.)

Como teste de qualquer método sugerido, considere isso como um caso de teste:

od -a /dev/random | <whatever-solution>

Com a solução substituída, isso deve criar uma nova janela com um pager (ou qualquer outro programa para esse assunto) que receba um fluxo aleatório infinito de texto.

(adição tardia) Estou procurando uma solução simples que manterá o espírito da tubulação em um pager. Soluções com várias etapas podem funcionar, mas não são naturais. Existe uma única linha de comando que também funciona: xterm -e 'whatever | less' , eu uso algumas vezes, mas não é natural para mim.

    
por laugh 19.03.2017 / 20:26

2 respostas

2

Que tal um pipe nomeado?

mkfifo /tmp/test.fifo
od -a /dev/urandom > /tmp/test.fifo

E na nova janela:

cat /tmp/test.fifo | less

Ou:

gnome-terminal -e "bash -c 'cat /tmp/test.fifo | less'"
    
por Philipp Ludwig 19.03.2017 / 21:04
0

Tente adicionar esta função ao seu ~ / .bashrc:

gless() { gnome-terminal -e "less $*" & }

Isso inicia o terminal em segundo plano, liberando seu console. Também passa todos os argumentos para o comando menor (por exemplo, gless -S test.txt)

    
por Simon Sudler 06.06.2017 / 10:26