смотреть вывод mysql с табличными столбцами

503
veilig

почему, когда я запускаю запрос mysql и выкидываю результаты в стандартный вывод, я получаю довольно печатную таблицу, т.е.

> mysql -e "describe <table>" <database> +------------+--------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------------------+-------+ | col1 | varchar(36) | NO | PRI | NULL | | | col2 | int(11) | NO | | NULL | | | col3 | varchar(35) | NO | | NULL | | | col4 | varchar(35) | NO | | NULL | | | col5 | varchar(25) | YES | | NULL | | | col6 | varchar(255) | YES | | NULL | | | col7 | varchar(255) | YES | | NULL | | | col8 | varchar(2) | YES | | NULL | | | col9 | varchar(75) | YES | | NULL | | | col10 | varchar(75) | YES | | NULL | | | col11 | varchar(75) | YES | | NULL | | | col12 | varchar(2) | YES | | NULL | | | col13 | varchar(10) | YES | | NULL | | | col14 | varchar(20) | YES | | NULL | | | col15 | timestamp | NO | | 0000-00-00 00:00:00 | | | col16 | timestamp | NO | | 0000-00-00 00:00:00 | | | col17 | timestamp | YES | | NULL | | +------------+--------------+------+-----+---------------------+-------+ 

но если я дам запрос с помощью watchкоманды, табличное форматирование исчезнет?

то есть:

> watch -n 1 'mysql -e "describe <table>" <database>'   Every 1.0s: mysql -e "describe <table>" <database> Mon Jun 9 12:08:54 2014  Field Type Null Key Default Extra col1 varchar(36) NO PRI NULL col2 int(11) NO NULL col3 varchar(35) NO NULL col4 varchar(35) NO NULL col5 varchar(25) YES NULL col6 varchar(255) YES NULL col7 varchar(255) YES NULL col8 varchar(2) YES NULL col9 varchar(75) YES NULL col10 varchar(75) YES NULL col11 varchar(75) YES NULL col12 varchar(2) YES NULL col13 varchar(10) YES NULL col14 varchar(20) YES NULL col15 timestamp NO 0000-00-00 00:00:00 col16 timestamp NO 0000-00-00 00:00:00 col17 timestamp YES NULL 

Могу ли я получить это обратно? Я пытался играть с режимом --raw, но, может быть, я просто пропустил соответствующий флаг?

1

1 ответ на вопрос

1
Benjamin Staton

You're looking for the -t option. MySQL's Online Help says about -t:

Display output in table format. This is the default for interactive use, but can be used to produce table output in batch mode.
So, when you run mysql from a prompt, you get the nice table format, but when you run in "batch mode" (for example, within a script, or in this case with watch), you don't get the formatting without using the -t. What you want is probably some variation of this: watch -n 1 'mysql -t -e "describe table" database' which will return the nicely formatted tables.