Heute wurde ich beim Versuch, einen Passwortgenerator für Twitter zu codieren, auf frischer Tat ertappt.
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
90 Zeichen. Da dies viel Platz ist, habe ich beschlossen, die Messlatte höher zu legen und sie auch ausführbar zu machen.
echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
139 Zeichen. Schön, außer offensichtlich Bash Chokes am Ausrufezeichen.
badp@delta:~$ echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
bash: !/usr/bin/python\nimport: event not found
Lästiges Ausrufezeichen. "Lass uns entkommen", dachte ich! Ich habe doch einen freien Charakter.
echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
Offensichtlich...
badp@delta:~$ echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg
./pg: line 2: syntax error near unexpected token `('
./pg: line 2: `import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))'
badp@delta:~$ cat pg
#\!/usr/bin/python
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
Lassen Sie meinen Asinine-Code beim Golfen beiseite - das kann ich nicht erklären.
Mit \!
wurde das Ausrufezeichen maskiert, außer es war wirklich nicht so, weil das \!
so gelassen wurde, wie es ist echo
, um es aufzunehmen.
Eine Lösung hätte \x21
stattdessen verwendet werden können, aber ich bin nicht davon überzeugt, dass dies der richtige Weg ist, um einem Ausrufezeichen in einem Bash-Befehl zu entkommen.
tl; dr: Wie entgeht man einem Ausrufezeichen in einem Bash-Befehl richtig?
!event
Syntax in erster Linie? Es hat mir immer nur Ärger gemacht.