Eu tenho um comando que eu executo sempre que um novo terminal é aberto ou um novo login é feito.
Este programa produz saída (colorida) que deve ser posicionada antes do prompt de comando. Pode demorar alguns segundos para executar, o que me impedirá de usar o terminal até então (a menos que seja executado em segundo plano).
Dado que o zsh possui algumas maneiras avançadas de redesenhar o terminal sem prejudicar o texto existente, eu gostaria de saber como executar este comando de uma maneira que não precise esperar que ele termine antes de poder usar o terminal, mas que uma vez finalizado, imprime a saída como se não estivesse em segundo plano em primeiro lugar.
Na prática, eu gostaria de algo que pudesse fazer:
Command output:
... (running on background)
me@computer: somecommand
me@computer: someothercommand
e quando o comando termina, eu recebo:
Command output:
* Output foo
* Multiple lines bar
* and some yada
me@computer: somecommand
me@computer: someothercommand
Tentei colocar o processo em segundo plano no início, mas ele não exibe a saída corretamente. Eu recebo algo como:
Command output:
[2] 32207
me@computer: somecommand
me@computer: someother * Output foo
* Multiple lines bar
* and some yada
[2] + done command
me@computer: someothercommand
Então, isso é possível? Se não estiver com o zsh, existe alguma solução por aí que possa fazê-lo?
Quaisquer sugestões ou informações são bem-vindas.
zpty
: executar o comando em um terminal criado pelo zsh, com sua saída retransmitida para o terminal real sob o controle do zsh.zpty
? Estou ciente de que você não pode ter dois programas gravando no mesmo terminal sem algum tipo de competição pelo cursor. Minha pergunta vem do fato de que o zsh já reescreve o prompt em algumas configurações. Obviamente, esse programa precisaria gravar em algum buffer temporário da memória que seria "impresso" no local específico assim que o comando fosse concluído. Todos estes últimos sob controle do zsh.screen
um script de inicialização que divide a tela e executa o corredor longo na parte superior e a linha de comando normal na parte inferior.Respostas:
Esta é uma solução simples se você estiver disposto a aceitar a saída logo acima da linha de prompt atual.
Quando o trabalho estiver concluído, o prompt atual e o buffer de entrada serão removidos e a totalidade dos comandos
stdout
estderr
será impressa.Você pode ficar muito mais sofisticado do que isso com o
zsh/curses
módulo, mas duvido que ofereceria uma vantagem significativa o suficiente para merecer o esforço.fonte
[1] 27911 27912
em uma única linha e como a primeira linha no terminal.