$ mysql -e 'select a,b from tablefoo' databasename
hasil panen
+---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
+---+---+
sedangkan
$ mysql -e 'select a,b from tablefoo' databasename > file
menghasilkan file yang file
berisi
a b
1 0
2 1
(di mana tab berada di antara karakter alfanumerik di setiap baris).
Saya akan berpikir bahwa redirection seharusnya tidak mengubah output. Mengapa saya mendapatkan dua hasil yang berbeda?
Edit: William Jackson 's jawaban mengatakan bahwa ini adalah fitur dari mysql: format output tergantung pada apakah output sedang diarahkan. Ini tidak menjawab pertanyaan saya. Bagaimana mysql 'tahu' apakah output sedang dialihkan? Apakah pengalihan tidak hanya mengambil output dan, baik, mengarahkannya kembali ke suatu tempat? Bukankah seharusnya itu tidak terlihat oleh mysql?
bash
mysql
redirection
stdout
msh210
sumber
sumber
-t
bendera ke perintah mysql Anda :)Jawaban:
Sunting: Saya tidak yakin ini bagaimana caranya
mysql
, tetapi bisa digunakanisatty(3)
untuk menentukan apakahSTDOUT
terminal atau tidak, dan memodifikasi output yang sesuai.Edit 2: The
mysql
tool baris perintah pasti menggunakanisatty()
. Anda dapat membaca kode sumber.Ada beberapa contoh bagus tentang hal ini (walaupun tidak ada
C
) di Stack Overflow:Untuk menjawab pertanyaan Anda, "Mengapa?": Karena itulah yang dikatakan dokumentasi. Lihat manual referensi :
Saya menduga keputusan ini dibuat untuk keterbacaan. Ketika digunakan secara interaktif,
mysql
dapat mengasumsikan manusia membaca output, dan umumnya lebih mudah bagi kita manusia untuk membaca data yang dibatasi oleh garis. Ketika digunakan secara non-interaktif, asumsinya adalah bahwa program lain akan mengkonsumsi output, dan output yang dibatasi-tab lebih mudah untuk dikonsumsi secara terprogram.Jika Anda tertarik untuk mengganti default ini dan mendapatkan format tabel ASCII saat mengarahkan output, Anda dapat menggunakan opsi baris perintah
--table
(-t
) :sumber
bash
dapat menggunakanisatty()
yang sama dengan program lain untuk menentukan apakah itu menunjuk ke tty atau file pada disk.isatty()
disediakan oleh OS, bukan bash.