Não é tail
, é o encanamento.
mysql
usa uma tabulação com o formato de saída de boxe ASCII quando seu stdout é um dispositivo terminal, quando é destinado a um usuário, e é revertido para um formato script quando não é, como quando é um pipe ou um arquivo normal.
Você veria o mesmo formato diferente com
mysql... | cat
ou
mysql > file; cat file
Veja também o -r
/ --raw
, -s
/ --silent
, -B
/ --batch
, -N
/ --skip-column-names
/ --column-names=0
, -H
/ --html
, -t
/ --table
... que afetam o formato de saída.
Se você quiser a saída tabular mesmo quando a saída não for para um dispositivo de terminal, adicione a opção -t
:
mysql -t ... | tail -n +2
Mas se o objetivo for remover a linha de cabeçalho, use apenas -N
, com ou sem -t
.
Aqui para obter os valores do banco de dados o mais bruto possível e sem cabeçalho, eu usaria:
mysql --defaults-extra-file=/some/protected/file/with/credentials \
--batch --raw --skip-column-names -e 'select...' database
Isto é:
- não exponha a senha na saída de
ps
passando as credenciais em um arquivo (como vocêmy.cnf
) com--defaults-extra-file
. - use o modo lote para evitar a saída tabular (e reconheça o fato de que estamos, na verdade, em lotes, o que pode ter outras implicações).
-
--raw
para evitar o escapar . Supondo que os valores não contenham novas linhas, caso contrário, a saída não pode ser processada de forma confiável. -
--skip-column-names
para remover a linha de cabeçalho.