Oggi sono stato colto in flagrante mentre tentavo di codificare golf un generatore di password per Twitter.
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
90 caratteri. Dato che c'è molto spazio libero, ho deciso di alzare il livello e renderlo anche eseguibile.
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 caratteri. Bello, tranne ovviamente che soffoca sul punto esclamativo.
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
Punto esclamativo fastidioso. "Scappiamo," ho pensato! Dopotutto, ho un personaggio in più.
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
Ovviamente...
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))
Lasciando da parte il mio codice di golf, non posso spiegarlo.
Con \!
, il punto esclamativo è stato evitato, tranne che in realtà non lo era, perché è \!
stato lasciato così com'è per echo
raccogliere.
\x21
Invece, avrebbe potuto utilizzare una soluzione , ma non sono convinto che sia il modo corretto di sfuggire a un punto esclamativo in un comando bash.
tl; dr: Come si evita correttamente un punto esclamativo in un comando bash?
!:0
!$
e !^
risparmio così tanto tempo e digitando.
!event
sintassi in primo luogo? Mi ha sempre causato solo problemi.