2010-07-20 28 views
33

No hasta la mitad de un script de compilación de 3 horas, recordaré que quiero ver algo al principio de la salida una vez que haya finalizado. En este punto, he excedido el número de líneas en mi terminal, así que no puedo desplazarme hacia arriba para verlo (o el comienzo es difícil de encontrar). Por supuesto que puedo ser mejor para almacenar mi producción, pero siempre he tenido curiosidad si esto fuera posible.Salida del último comando de shell

En un shell de linux, es posible devolver la salida del último comando. Me doy cuenta de que podría haberlo canalizado o enviado la salida a un archivo, pero mi requisito es recuperar esa salida después de que se haya ejecutado el comando.

Usando csh, pero escucharía sobre cualquier shell.

+0

bash http://stackoverflow.com/questions/5955577/bash-automatically-capture-output-of-last-executed-command-into-a-variable –

Respuesta

32

No. La salida de un programa nunca pasa por las manos de la carcasa. Sin redirección, va directamente al TTY. Con la redirección, va directamente a cualquier archivo o tubería al que fue dirigido. El shell no tiene idea de lo que el proceso envió a stdout/stderr.

+0

Gracias, eso es lo que quería saber – ack

1

Puede ver el código de retorno del último comando, al menos en bash, con $?.

En cuanto a la salida estándar, no creo que puedas.

0

¿guardar salida como una variable?

bash: Output=$(ls); echo $Output 
+0

Él dice en su pregunta: "Me doy cuenta de que podría haberlo canalizado o enviado la salida a un archivo, pero mi requisito es recuperar esa salida después de que se haya ejecutado el comando". –

2

¿Qué le parece usar la sustitución. De esta manera:

command1 
command2 
RESULT=`LASTCOMMAND` 
echo $RESULT

+0

los backticks son la parte más complicada. las personas tienden a usar comillas simples o dobles. – asgs

0

Mi ser puede utilizar el comando tee para poner la salida en STDOUT también en un archivo y luego usarlo.

3

Esto podría ser muy complicado con ciertos comandos que usan direcciones de cursor. ¿Cuál es el resultado de tu sesión de vim? O un ejemplo un poco más sensato: estás descargando un archivo con wget, y muestra una barra de porcentaje que va del 0% al 100%. ¿Cuál es el resultado de eso?

Creo que básicamente quiere una copia impresa de cualquier cosa entre su línea actual y el aviso anterior. Eso no es algo por lo que la redirección de shell sería un buen ejemplo, eso es básicamente algo que haría una terminal. Puede hacerlo manualmente copiando y pegando en la pantalla, y tal vez podría automatizarlo con su comando exec. tmux podría tener algo similar, y usted puede hacer cosas raras con los modos de shell de Emacs, pero esa es una solución bastante pesada. rxvt Unicode tiene un perl extension ...

19

script(1) es exactamente lo que necesita:

script 
make 
exit 
vim typescript 

El programa script se iniciará un nuevo shell y guardar la entrada y salida en el fichero de typescript. Cuando haya terminado, simplemente cierre el shell con exit o ^D. Si prefiere no iniciar un nuevo shell pero solo ejecutar su compilación, puede usar: script -c <command>.

+0

Eso es genial. Me gusta cómo puede usarlo para registrar un lote completo de comandos. – ack

0

Esta es una función de su terminal. Debes enfocarte en crear una configuración donde no tengas que recordar hacer nada. Una posible solución es iniciar "pantalla" en su secuencia de comandos de inicio de sesión (que no es tan fácil de obtener) con el registro habilitado.

8

Si ejecutar el comando nuevamente no cambiará nada, puede usarlo !! para acceder a la parte superior de la pila de historial para volver a ejecutar el último comando. Hacerlo en los puntos de apoyo le permitirá usar el resultado.

$> find . -iname fileInUnknownLocationInHierarchy.txt 
./something/buried/deep/where/you/dont/want/to/retype/fileInUnknownLocationInHierarchy.txt 
$> vim `!!` 
+0

Esto funciona pero significa volver a ejecutar el comando. Si el comando anterior fue una búsqueda larga, tendrá que esperar nuevamente. – Melebius

0

Siempre puede ejecutar el proceso dentro de una ventana de shell de emacs. Guardará todo.

1

Si solo busca el código de retorno del último comando ejecutado, use echo $?.

Esto generalmente es útil cuando quiere saber si su último comando se ejecutó correctamente y también puede moldearlo en su script de compilación para alertas pasa/falla.

Cuestiones relacionadas