我有一个脚本可以使用选项覆盖配置文件中的值,例如,选项--password
可以覆盖配置文件中的设置(请注意,这不是关于安全性的讨论)。但是,密码可以包含由bash
标识为特殊字符的字符,并且这些字符需要转义或放在“”中。
现在我理解这一点。虽然我不知道将来谁会使用这个脚本,所以我想保存他或她的密码不正确的麻烦,因为,他或她忘了把密码放在“”或逃避特殊字符。
处理此类输入的最佳方法是什么?
提前致谢。
答案 0 :(得分:5)
嗯..双引号是不够的。必须使用单引号,因为罕见的情况,例如
mycommand --password "AAA$PWD" #is worng for any exported environment varname
mycommand --password 'AAA$PWD' #ok
这是没办法避免这种情况,因为你的用户使用了一种shell,有什么变量扩展和metachar-globbing。你的命令已经扩展了args,所以这里无法在你的脚本中捕获它。
唯一的方法 - 正如@Bohemian上面所说 - 从tty读取密码。您可以在当前脚本周围编写一个简单的包装器,从tty读取密码,之后将使用正确的转义--pasword参数执行脚本。
答案 1 :(得分:0)
有一个简单但不太直观的解决方案。
使用'“CARACTER”'封装导致问题的字符。并将所有密码字符串放在单引号之间。
在我的情况下,造成问题的角色是'(单引号)。
所以,如果我有这样的命令:
mycommand --password 'AAA'PWD'
替换为:
mycommand --password 'AAA'"'"'PWD'
现在我的密码是三个字符串的串联。说明:
'AAA' + "'" + 'PWD' # plus sign is just to make clear the contatenation.
这是有效的。