Depois de clicar duas vezes em um script na área de trabalho, mostre a saída em um terminal

3

Estou tentando criar uma máquina virtual de demonstração. Na área de trabalho, tenho um script foo.sh e gera stdout para foo.log (por exemplo, com some command > foo.log )

Quando eu clico duas vezes no script, ele gera o foo.log. No entanto, gostaria que o script também apresentasse o stdout em tempo real (por exemplo, usando tail -f foo.log ).

Como posso fazer isso? Preciso canalizar a saída para dois lugares?

    
por David LeBauer 24.01.2012 / 21:26

3 respostas

2

Esta pode não ser a abordagem mais elegante, mas parece funcionar:

Adicione o seguinte ao script:

touch foo.log
uxterm -e "tail -f foo.log" &
some command > foo.log

com o gnome-terminal, substitua uxterm -e por gnome-terminal -x .

Obrigado ao Hilltop Yodeler por me direcionar para esta solução.

    
por David LeBauer 24.01.2012 / 23:40
1

O comando padrão tee do Unix permite redirecionar a entrada padrão do comando para um ou mais arquivos e também imprimi-lo na saída padrão. Então você pode fazer algo parecido com

myscript.sh|tee mylog.log

desde que o myscript.sh apenas imprima na saída padrão (o que simplificaria isso)

Para abrir as janelas de um terminal ao clicar no ícone, você pode envolvê-lo em outro script:

xterm -e "myscript.sh | tee mylog.log; read -p FINISHED"

A diferença com a sua solução é que você tem a opção de fechar a janela do terminal quando o script terminar ou exibir a mensagem "Pressione qualquer tecla para continuar ..." - com tail -f o terminal basicamente não tem como saber quando seu script terminar, você terá que interrompê-lo com Ctrl-C.

Além disso, o tail -f deve ser menos eficiente do que imprimir diretamente no terminal, mas isso provavelmente não é muito importante nos dias de hoje.

    
por Sergey 24.01.2012 / 22:55
1

Eu fiz a sugestão de Sergy e, se funcionou, pode ser um problema de caminho. Aqui está o comando exato que eu usei e o resultado foi uma abertura xterm, mostrando a saída do script e, em seguida, diz "Pressione para fechar". Eu sugiro que você adicione o caminho na frente do nome do script, e possivelmente o nome do arquivo de log.

xterm -e "./myscript.sh | tee ./mylog.log; read -p Press\ return\ to\ close\ "

Toda a minha versão do myscript.sh foi para ecoar várias linhas, mas funcionou.

    
por Hey Gary 29.07.2012 / 04:29