2017-07-17 93 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,这些都是窗外的东西。