2017-08-28 27 views
-1

で単一のバックスラッシュを作成します。私は実行したいと思います:はルビー

echo aA1.-_#*~^%\':\;[email protected]=/ | passwd --stdin user 

これは"aA1.-_#*~^%':;[email protected]=/"でログインすることができます。

私は

str = "aA1.-_#*~^%':;[email protected]=/" 
password = str.gsub("'", "\\\\'").gsub(";", "\\;") 

passwd_command = "echo" + 
    " #{password}" + 
    " | passwd" + 
    " --stdin user" 

を試してみましたが、結果は以下のとおりであった:

echo aA1.-_#*~^%\\':\\;[email protected]=/ | passwd --stdin aaa 

私はそれを実行:

[[email protected] ~]# echo aA1.-_#*~^%\\':\\;[email protected]=/ | passwd --stdin aaa 
> 

コマンドが完了していません。何か提案はありますか?

答えて

1

Shellwords#escapeは、これがその目的であるためです。

require 'shellwords' 

Shellwords.escape("aA1.-_#*~^%':;[email protected]=/") 
#=> "aA1.-_\\#\\*\\~\\^\\%\\':\\;\\?\\[email protected]\\=/" 
+0

は私が エコーAA1を得た\\#\\ * \\〜\\^\\%\\\\ "-_:\\\\。\\? \\!@ \\ =/| passwd --stdin aaa 私たちは同じページにいますか? –

+0

それは機能しましたか?私は便利なWindowsシステムで私のマシンを実行したので、おそらくそれはOSへの出力を調整します。 –

+0

>それは機能しましたか? - >いいえ。私はCentOSを使用します –