Tengo un comando que ejecuto cada vez que se abre un nuevo terminal o se realiza un nuevo inicio de sesión.
Este programa produce una salida (coloreada) que debe colocarse antes del símbolo del sistema. Puede tardar unos segundos en ejecutarse, lo que me impedirá usar el terminal hasta entonces (a menos que se ejecute en segundo plano).
Dado que zsh tiene algunas formas avanzadas de volver a dibujar el terminal sin alterar el texto existente, me gustaría saber cómo puedo ejecutar este comando de una manera que no tenga que esperar a que termine antes de poder usar el terminal, pero eso una vez que termina, imprime la salida como si no estuviera en segundo plano en primer lugar.
En la práctica, me gustaría algo que pudiera hacer:
Command output:
... (running on background)
me@computer: somecommand
me@computer: someothercommand
y una vez que termine el comando obtendría:
Command output:
* Output foo
* Multiple lines bar
* and some yada
me@computer: somecommand
me@computer: someothercommand
Intenté poner el proceso en segundo plano al inicio, pero luego no muestra la salida limpiamente. Me sale 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
Entonces, ¿es esto posible? Si no con zsh, ¿hay alguna solución que pueda hacerlo?
Cualquier sugerencia o información es bienvenida.
zpty
: hacer que el comando se ejecute en un terminal creado por zsh, con su salida transmitida al terminal real bajo el control de zsh.zpty
? Soy consciente de que no puedes tener dos programas escribiendo en el mismo terminal sin algún tipo de competencia sobre el cursor. Mi pregunta proviene del hecho de que zsh ya reescribe el indicador en algunas configuraciones. Obviamente, este programa tendría que escribir en algún búfer temporal en memoria que luego sería "impreso" en la ubicación específica una vez que finalice el comando. Todo esto último bajo control de zsh.screen
un script de inicio que divide la pantalla y ejecuta el corredor largo en la parte superior y la línea de comando normal en la parte inferior.Respuestas:
Esta es una solución simple si está dispuesto a aceptar resultados justo por encima de la línea de solicitud actual.
Cuando finalice el trabajo, se eliminarán la solicitud actual y el búfer de entrada
stdout
ystderr
se imprimirán la totalidad de los comandos .Usted puede conseguir mucho más elegante de lo que con el
zsh/curses
módulo, pero dudo que ofrecería una ventaja significativa suficiente para merecer el esfuerzo.fuente
[1] 27911 27912
en una sola línea y como la primera línea en el terminal.