$ mysql -e 'select a,b from tablefoo' databasenamerendimientos
+---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
+---+---+mientras
$ mysql -e 'select a,b from tablefoo' databasename > fileproduce un archivo que filecontiene
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

-tbandera a su comando mysql :)Respuestas:
Editar: No puedo estar seguro de cómo
mysqles esto, pero podría usarseisatty(3)para determinar siSTDOUTes un terminal o no, y modificar la salida en consecuencia.Edición 2: La
mysqlherramienta 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,
mysqlpuede 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
bashpuede 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.