Ho un comando che eseguo ogni volta che viene aperto un nuovo terminale o viene effettuato un nuovo accesso.
Questo programma produce output (colorato) che dovrebbe essere posizionato prima del prompt dei comandi. Potrebbero essere necessari alcuni secondi, il che mi impedirà di utilizzare il terminale fino a quel momento (a meno che non venga eseguito in background).
Dato che zsh ha alcuni modi avanzati di ridisegnare il terminale senza ostruire il testo esistente, vorrei sapere come posso eseguire questo comando in un modo che non devo aspettare che finisca prima di poter usare il terminale ma quello una volta terminato, stampa l'output come se in primo luogo non fosse in background.
In pratica vorrei qualcosa che potesse fare:
Command output:
... (running on background)
me@computer: somecommand
me@computer: someothercommand
e una volta terminato il comando otterrei:
Command output:
* Output foo
* Multiple lines bar
* and some yada
me@computer: somecommand
me@computer: someothercommand
Ho provato a mettere il processo in background all'avvio ma poi non visualizza l'output in modo pulito. Ottengo qualcosa del tipo:
Command output:
[2] 32207
me@computer: somecommand
me@computer: someother * Output foo
* Multiple lines bar
* and some yada
[2] + done command
me@computer: someothercommand
Quindi è possibile? Se non con zsh c'è qualche soluzione là fuori che potrebbe farlo?
Qualsiasi suggerimento o informazione è il benvenuto.
zpty
? Sono consapevole che non puoi avere due programmi che scrivono sullo stesso terminale senza una sorta di competizione sul cursore. La mia domanda viene dal fatto che zsh riscrive già il prompt in alcune configurazioni. Ovviamente questo programma dovrebbe scrivere su un buffer temporaneo in memoria che verrebbe "stampato" nella posizione specifica una volta terminato il comando. Tutti questi ultimi sotto il controllo di zsh.
screen
con uno script di avvio che divide lo schermo ed esegue il long runner nella parte superiore e la normale riga di comando nella parte inferiore.
zpty
: far eseguire il comando in un terminale creato da zsh, con la sua uscita inoltrata al terminale reale sotto il controllo di zsh.