在 Ruby 中创建单个反斜杠

Create single backslash in Ruby

我要执行:

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
>

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

我建议Shellwords#escape因为这是它的目的。

require 'shellwords'

Shellwords.escape("aA1.-_#*~^%':;?!@=/")
#=> "aA1.-_\#\*\~\^\%\':\;\?\!@\=/"

我不知道 shellwords,但是默认的 Ruby 方法还不够吗?喜欢 %q 和 %x?

参见示例:https://simpleror.wordpress.com/2009/03/15/q-q-w-w-x-r-s/