Editar: não posso ter certeza de que é assim que mysql
o faz, mas pode estar usando isatty(3)
para determinar se STDOUT
é um terminal ou não, e modificando a saída de acordo.
Editar 2: A ferramenta de linha de comando mysql
definitivamente usa isatty()
. Você pode ler o código-fonte.
Há alguns bons exemplos disso (embora não em C
) no Stack Overflow:
- PHP: Como posso detectar o redirecionamento STDOUT na CLI do PHP?
- Python: Como eu detecto se o sys.stdout está conectado ao terminal ou não?
Para responder à sua pergunta "Por quê?": porque é isso que a documentação diz. Veja o manual de referência :
When used interactively, query results are presented in an ASCII-table format. When used noninteractively (for example, as a filter), the result is presented in tab-separated format.
Eu suspeito que esta decisão foi tomada por legibilidade. Quando usado interativamente, mysql
pode assumir que um humano está lendo a saída, e geralmente é mais fácil para nós humanos lermos os dados que são delimitados por essas linhas. Quando usado de forma não interativa, a suposição é que outro programa consuma a saída e que a saída delimitada por tabulação seja mais fácil de consumir programaticamente.
Se você estiver interessado em sobrescrever este padrão e obter o formato de tabela ASCII ao redirecionar a saída, você pode usar o --table
( -t
) opção de linha de comando :
mysql -t -e 'select a,b from tablefoo' databasename > file