Hay dos posibilidades. Puede ejecutarlo como una interconexión (creada con open |...
) y manejar los mensajes tal como vienen almacenándolos e imprimiéndolos, o use la utilidad Unix tee
. ¡La segunda alternativa es definitivamente más simple!
# I like to spell out “update” in full
set cvsUpdStr [exec cvs -qn update | tee /dev/tty]
El programa tee
envía su entrada estándar a la salida estándar normal más el archivo llamado; usamos /dev/tty
para enviarlo a la terminal actual.
Sin embargo, tenga en cuenta que puede obtener largas demoras en la salida de cvs
debido a que el buffer de su salida. Este es solo el comportamiento predeterminado de la gestión de E/S de la biblioteca C al enviar la salida a un terminal no terminal, y puede ser un problema si necesita la salida instantáneamente. La fijación de este se pone un poco complicado (que terminan usando Esperar) por lo que si usted es feliz con la salida siendo ráfagas, simplemente dejarlo solo ...
En Windows, es necesario hacerlo de la otra manera.
set pipe [open |[list cvs -qn update] "r"]
while {[gets $pipe line] >= 0} {
append cvsUpdStr "$line\n" ;# Note the \n at the end!
puts $line
}
close $pipe ;# Any errors turn up here!
El constructo con |[list ...]
es bastante inusual en términos Tcl, pero es la correcta para utilizar en esta situación. (Si el primer carácter del “nombre de archivo” a open
es un |
, la resto del argumento es tratado como una lista de argumentos a utilizar para la construcción de un oleoducto.)
Si usted está especialmente interesado en las cosas de CVS, Puede echar un vistazo a tkcvs, ya que envuelve la mayoría de los comandos CVS con Tcl. http://tksvn.tigris.org/source/browse/tksvn/trunk/tkcvs/ – schlenk