我有一个脚本,可以使用选项覆盖配置文件中的值,例如,选项 --password
可以覆盖配置文件中的设置(请注意,这不是关于安全)。但是,密码可以包含由 bash
识别为特殊字符的包含字符,并且这些字符需要转义或放置在“”内。
现在我明白了这一点。虽然我不能说将来谁会使用这个脚本,所以我想避免他或她密码不正确的麻烦,因为他或她忘记将密码放在“”内或转义特殊字符性格。
处理此类输入的最佳方法是什么?
提前致谢。
最佳答案
嗯..双引号是不够的。必须使用单引号,因为很少有情况,例如
mycommand --password "AAA$PWD" #is worng for any exported environment varname
mycommand --password 'AAA$PWD' #ok
这里没有办法避免这种情况,因为您的用户使用某种 shell,它具有变量扩展和元字符通配。您的命令已经扩展了参数,因此无法在脚本中捕获它。
唯一的方法 - 正如@Bohemian 上面所说 - 从 tty 读取密码。您可以围绕当前脚本编写一个简单的包装器,它将从 tty 读取密码,然后使用正确转义的 --pasword 参数执行您的脚本。
关于bash - 处理shell脚本输入中特殊字符的简单解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243125/