$ mysql -e 'select a,b from tablefoo' databasename
rendimentos
+---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
+---+---+
enquanto que
$ mysql -e 'select a,b from tablefoo' databasename > file
produz um arquivo file
contendo
a b
1 0
2 1
(onde uma guia está entre os caracteres alfanuméricos em cada linha).
Eu acho que o redirecionamento não deve alterar a saída. Por que obtenho dois resultados diferentes?
Edit: A resposta de William Jackson diz que este é um recurso do mysql: formato de saída depende se a saída está sendo redirecionada. Isso não responde à minha pergunta, no entanto. Como o mysql 'sabe' se a saída está sendo redirecionada? O redirecionamento não pega apenas a saída e, bem, redireciona-a para algum lugar? Isso não deveria ser invisível para o mysql?
bash
mysql
redirection
stdout
msh210
fonte
fonte
-t
flag ao seu comando mysql :)Respostas:
Edit: Não posso ter certeza de que é assim
mysql
, mas pode ser usadoisatty(3)
para determinar seSTDOUT
é um terminal ou não e modificar a saída de acordo.Edit 2: A
mysql
ferramenta de linha de comando definitivamente usaisatty()
. Você pode ler o código fonte.Existem alguns bons exemplos disso (embora não estejam
C
) no Stack Overflow:Para responder sua pergunta, "Por quê?": Porque é isso que a documentação diz. Consulte o manual de referência :
Eu suspeito que essa decisão foi tomada para facilitar a leitura. Quando usado de forma interativa,
mysql
pode assumir que um humano está lendo a saída, e geralmente é mais fácil para nós, humanos, ler dados que são delimitados por essas linhas. Quando usado de forma não interativa, a suposição é que outro programa consumirá a saída e que a saída delimitada por tabulação é mais fácil de consumir programaticamente.Se você estiver interessado em substituir esse padrão e obter o formato da tabela ASCII ao redirecionar a saída, poderá usar a opção de linha de comando
--table
(-t
) :fonte
bash
pode usarisatty()
o mesmo que qualquer outro programa para determinar se está apontando para um tty ou um arquivo no disco.isatty()
é fornecido pelo sistema operacional, não pelo bash.