我想执行:
echo aA1.-_#*~^%\':\;?!@=/ | passwd --stdin user
可以使用"aA1.-_#*~^%':;?!@=/"
登录。
我试过
str = "aA1.-_#*~^%':;?!@=/"
password = str.gsub("'", "\\\\'").gsub(";", "\\;")
passwd_command = "echo" +
" #{password}" +
" | passwd" +
" --stdin user"
但结果是:
echo aA1.-_#*~^%\\':\\;?!@=/ | passwd --stdin aaa
我执行了它:
[root@localhost ~]# echo aA1.-_#*~^%\\':\\;?!@=/ | passwd --stdin aaa
>
命令尚未完成。你有什么建议吗?
答案 0 :(得分:1)
我建议Shellwords#escape因为这是它的目的。
require 'shellwords'
Shellwords.escape("aA1.-_#*~^%':;?!@=/")
#=> "aA1.-_\\#\\*\\~\\^\\%\\':\\;\\?\\!@\\=/"
答案 1 :(得分:0)
我不知道shellwords,但默认的Ruby方法是不是足够了?像%q和%x?
例如参见:https://simpleror.wordpress.com/2009/03/15/q-q-w-w-x-r-s/