2012-09-23 65 views
1

我一直覺得命令行實用mysql是有點令人驚訝,因爲你可以這樣做:程序如何在輸入重定向之後讀取控制檯輸入?

gzcat dumpfile.sql.gz | mysql -u <user> -p <options> 

mysql會提示你輸入密碼。現在,stdinmysql重定向 - 一個希望它來讀取轉儲文件的密碼。相反,它以某種方式繞過stdin並直奔終端。 ssh做同樣的事情。我懷疑這是某種/dev/tty/dev/pty魔法,但我很感謝這個明顯的魔術:)(以及爲什麼這些程序可以在任何平臺上,甚至是Windows上都可以做到這一點)的適當解釋。

回答

3

如你推測,它是使用/dev/tty,其被指定這種方式:

在每個過程中,[/dev/tty是用於與該進程的進程組相關聯的控制終端的同義詞,如果有的話。這對於希望確保消息寫入或從終端讀取數據,無論輸出是如何被重定向的程序或shell程序非常有用。它也可以用於輸入輸出需要時需要對輸出文件名的程序,這是煩人找出終端正在使用什麼。

沒有真正的 「神奇」 不止於此。

[link]

+0

雖然Windows沒有這個,不是嗎? – nneonneo

+2

@nneonneo:不,它沒有。這是* nix功能。在Windows API提供了不同的機制(內見[http://msdn.microsoft.com/en-us/library/windows/desktop/ms682073.aspx](http://msdn.microsoft.com/en-us /library/windows/desktop/ms682073.aspx))。它並不像有一個運行在兩種類型的系統上的「mysql」程序; mysql的* nix版本使用* nix功能,Windows版本使用Windows功能。 – ruakh