$ mysql -e 'select a,b from tablefoo' databasename
rendimientos
+---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
+---+---+
mientras
$ mysql -e 'select a,b from tablefoo' databasename > file
produce un archivo que file
contiene
a b
1 0
2 1
(donde hay una pestaña entre los caracteres alfanuméricos en cada línea).
Creo que la redirección no debería cambiar la salida. ¿Por qué obtengo dos resultados diferentes?
Editar: la respuesta de William Jackson dice que esta es una característica de mysql: el formato de salida depende de si la salida se está redirigiendo. Sin embargo, esto no responde mi pregunta. ¿Cómo 'sabe' mysql si la salida se está redirigiendo? ¿La redirección no solo toma la salida y, bueno, la redirige a alguna parte? ¿No debería ser invisible para mysql?
bash
mysql
redirection
stdout
msh210
fuente
fuente
-t
bandera a su comando mysql :)Respuestas:
Editar: No puedo estar seguro de cómo
mysql
es esto, pero podría usarseisatty(3)
para determinar siSTDOUT
es un terminal o no, y modificar la salida en consecuencia.Edición 2: La
mysql
herramienta de línea de comandos utiliza definitivamenteisatty()
. Puedes leer el código fuente.Hay algunos buenos ejemplos de esto (aunque no en
C
) en Stack Overflow:Para responder a su pregunta, "¿Por qué?": Porque eso es lo que dice la documentación. Ver el manual de referencia :
Sospecho que esta decisión se tomó para facilitar la lectura. Cuando se usa de forma interactiva,
mysql
puede suponer que un ser humano está leyendo la salida, y generalmente es más fácil para nosotros los humanos leer datos que están delimitados por esas líneas. Cuando se usa de forma no interactiva, se supone que otro programa va a consumir la salida, y que la salida delimitada por tabulaciones es más fácil de consumir mediante programación.Si está interesado en anular este valor predeterminado y obtener el formato de tabla ASCII al redirigir la salida, puede usar la opción de línea de comando
--table
(-t
) :fuente
bash
puede usarisatty()
lo mismo que cualquier otro programa para determinar si está apuntando a un tty o un archivo en el disco.isatty()
es proporcionado por el sistema operativo, no bash.