2017-07-17 71 views
0

之間的區別下列命令給我不同的結果:MySQL客戶端:-p和--password

mysql -u myuser -h my.database.server -p=mypass mydatabase 
> ERROR 1045 (28000): Access denied for user 'myuser'@'11.22.33.44' (using password: YES) 

mysql -u myuser -h my.database.server --password=mypass mydatabase 
> Welcome to the MySQL monitor. Commands end with ; or \g... etc 

我理解爲通過mysql --help說這兩個選項是相同的:

-p, --password [= name] 連接到服務器時使用的密碼。如果密碼是 沒有給出tty的要求。

我試着用單引號和雙引號引用密碼-p。任何人都知道這兩種提供密碼的方式和記錄在哪裏有什麼區別?

添加-p沒有=只是提示從標準輸入的傳球,但是當我添加了=它沒有提示,所以我想它在消費密碼,但不知何故,分析是錯誤的。

+2

[mysql doc](https://dev.mysql.com/doc/refman/5.7/en/user-names.html):'[...]如果您使用-p選項,則必須有-p和以下密碼值之間沒有空格。[...]' –

回答

1

儘管對命令行選項的工作方式沒有嚴格要求,但他們往往會隨時隨地在開發軟件的人身上,這裏有兩個強有力的約定。有「單字母」風格,如-p,以及長表單,如--password

按照慣例單字母選項不使用=方法。他們採用這樣的:

-pmypassword 

這不是非常可讀的,所以長期形成的版本是首選:

--password=mypassword 

-p選項mysql似乎是要求輸入,除非你一個簡單的觸發混淆實際密碼,而長形式版本或者觸發,或者如果有一個=部分,它將添加該密碼作爲密碼,並在命令行中使用密碼。

這種相對一致性背後的一個原因是存在像GNU的getopt這樣的庫,它可以處理長參數和短參數。任何誰滾動自己的論證處理庫可能採取不同的方法。

現在大多數工具都遵循這種風格,但也有一些,如findopenssl,這些都是窗外的東西。

相關問題