2012-06-22 10 views
6

fiesta comenzando con -v opción produce una larga salida en la consola¿Se puede redireccionar la salida bash -v?

$ bash -v 

source ~/Dropbox/bin/tim_functions.sh 

\#!/bin/bash 
...several hundred more lines 

Me gustaría capturar la salida a un archivo para que sea más fácil de navegar a través de, pero he intentado bash -v 2>&1 > out_bash.txt y bash -v | tee out_bash.txt y no puedo capturar la información en la pantalla del terminal dentro de un archivo. Es como si la salida detallada no fuera stderr o stdout. ¿Cómo puede ser esto?

¿Alguien puede sugerir una forma de capturar la salida de bash -v?

Respuesta

1

Después de leer otras respuestas útiles, creo que este asunto tiene que ver con la forma en fiesta está enviando la información detallada hacia el TTY - que es de alguna manera diferente de stderr o stdout. Se puede capturar con el siguiente trabajo alrededor:

$ screen -L 
$ bash -v 
$ exit #from the bash session 
$ exit #from the screen session 

Esto da como resultado que se genere un archivo screenlog.0 que contiene el resultado.

salida de la fiesta -v de interés fue en un Mac con 10.7.3 (León) con

$ bash --version 
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11) 
Copyright (C) 2007 Free Software Foundation, Inc.) 

Otra 10.6.8 mac He intentado tuvo una salida inferior (interesante/verboso), a pesar de un similares archivo .bashrc

0

¿Ha intentado envolver su hijo bash en una subcategoría?

(bash -v) 2>&1 > out_bash.txt 
+0

he intentado su sugerencia, pero no hubo suerte - todavía no captura la información. Parece que el resultado de bash -v está relacionado con la información de depuración. Y la información de depuración parece no ser stderr o stdout. Estoy empezando a pensar que no se puede redireccionar desde la terminal. – Tim

+0

Bash no es mágico; cualquier cosa enviada a su tty salió de la llamada 'write()' (o equivalente) de * somewhere *. Lo que puede estar sucediendo es que el propio shell interactivo está produciendo el resultado, mientras que la redirección solo se puede aplicar a los procesos hijos engendrados. Esta es la razón por la que pensé que enrollar una capa y elevar el redireccionamiento podría funcionar ... – phs

+0

Pero cuando estás en una sesión bash y ejecutas bash -v, eso genera un proceso hijo (la nueva sesión bash). Así que, a menos que el proceso principal realizara las llamadas write() para la información de depuración del hijo, en lugar del proceso secundario que llama a write() en sí, aún parece que la información del terminal debe ser re-direccionable. Pero tal vez así es como se genera la información de depuración: el padre de alguna manera supervisa la actividad del niño e informa sobre ello. – Tim

4

Asomé alrededor y encontré este http://www.commandlinefu.com/commands/view/3310/run-a-bash-script-in-debug-mode-show-output-and-save-it-on-a-file

En el sitio web que utilizan bash -x test.sh 2>&1 | tee out.test, pero he comprobado con bash -v test.sh 2>&1 | tee out.test y funcionó bien.

+0

Aunque estoy haciendo algo un poco diferente, estoy intentando ejecutar solo 'bash -v' no 'bash -v some_script.sh'. La ejecución de bash -v le da a la información de depuración la posibilidad de crear un nuevo proceso hijo de shell en lugar de crear un nuevo proceso ejecutando un script. Parece que la información de depuración es difícil de detectar en mi caso. Pero encontré la manera de hacerlo, mediante el uso del comando de pantalla (ver comentario a continuación). Gracias por tu ayuda. – Tim

+0

@ pgreen2 thx, funciona – sb32134

6
bash -v 2>&1 > out_bash.txt 

no es lo que desea, debe ser

bash -v >out_bash.txt 2>&1 
0

Puede usar, bash -v 2> & 1 | tee archivo.txt o bash -v 2> & 1 | grep SEARCH_STRING

3

también puede utilizar el comando exec en el script para redirigir todas las salidas:

#!/bin/bash 
exec >> out.txt 2>> out.txt 
set -x 
set -v 
echo "testing debug of shell scripts" 
ls 
Cuestiones relacionadas