Невозможно понять это странное поведение клиента MySql - PullRequest
0 голосов
/ 30 августа 2009

Я не уверен, что здесь происходит с выводом штриховой графики / usr / bin / mysql здесь.

Проблема: Я не могу перенаправить штриховой рисунок (используемый при создании столбцов таблицы) в файл!

Сначала я делаю это на своем терминале.

[sd@host:~/tmp]
$ mysql -usd sd -e 'select * from loan;'
+---------+--------------+--------+
| loan_no | branch_name  | amount |
+---------+--------------+--------+
| L-11    | Round Hill   |    900 | 
| L-14    | Downtown     |   1500 | 
| L-15    | Perryridge   |   1500 | 
| L-16    | Perryridge   |   1300 | 
| L-17    | Downtown     |   1000 | 
| L-23    | Redwood      |   2000 | 
| L-93    | Mianus       |    500 | 
+---------+--------------+--------+

Теперь я хочу, чтобы вся эта благословенная вещь, напечатанная выше, была захвачена, поэтому я перенаправляю stdout и stderr в файл out, вот так:

[sd@host:~/tmp]
$ mysql -usd sd -e 'select * from loan;' >out 2>&1

Как вы можете видеть ниже, штриховые рисунки полностью отсутствуют!

[sd@host:~/tmp]
$ cat out
loan_no branch_name amount
L-11    Round Hill  900
L-14    Downtown    1500
L-15    Perryridge  1500
L-16    Perryridge  1300
L-17    Downtown    1000
L-23    Redwood 2000
L-93    Mianus  500

Еще одно доказательство того, что штриховая графика ДЕЙСТВИТЕЛЬНО отсутствует! (Опция -T печатает вкладки, если они есть.)

[sd@host:~/tmp]
$ cat -T out
loan_no^Ibranch_name^Iamount
L-11^IRound Hill^I900
L-14^IDowntown^I1500
L-15^IPerryridge^I1500
L-16^IPerryridge^I1300
L-17^IDowntown^I1000
L-23^IRedwood^I2000
L-93^IMianus^I500

Итак, мой вопрос , как, черт возьми, MySQL знает, кто - терминал или текстовый файл - высасывает вывод из его задней части? end ' :-)?

Ответы [ 2 ]

2 голосов
/ 30 августа 2009

Это знает

Ситуация аналогична

$ ls
tom   dick   harry

и

$ ls > out
$ cat out
tom
dick
harry
2 голосов
/ 30 августа 2009

Программа может определить, является ли выходной поток терминальным или не используется функция isatty (3) .

MySQL использует эту информацию для изменения своего вывода (см. man mysql , опция "-t" также производит вывод таблицы для неинтерактивного режима)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...