2017-08-28 4 views
-1

Ich mag auszuführen:in Ruby einzige Backslash erstellen

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

Es mit "aA1.-_#*~^%':;[email protected]=/" angemeldet sein.

Ich versuchte

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

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

aber das Ergebnis war:

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

ich es ausgeführt:

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

Der Befehl nicht beendet hat. Hast du irgendwelche Vorschläge?

Antwort

1

Ich schlage vor, Shellwords#escape, weil dies der Zweck ist.

+0

Ich habe echo aA1 \\ # \\ * \\ ~ \\^\\% \\\\ '-_:. \\\\; \\? \\! @ \\ =/| passwd --stdin aaa Sind wir auf der gleichen Seite? –

+0

Hat es funktioniert? Ich habe meins auf einem Windows-System ausgeführt, das ich griffbereit hatte, also passt es vielleicht seine Ausgabe an das OS an. –

+0

> Hat es funktioniert? -> nein. Ich benutze CentOS –

Verwandte Themen