在Ruby中创建单反斜杠

时间:2017-08-28 16:57:30

标签: ruby bash backslash

我想执行:

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
>

命令尚未完成。你有什么建议吗?

2 个答案:

答案 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/