Dzisiaj zostałem przyłapany na gorącym uczynku podczas próby kodowania golfa jako generatora haseł na Twitterze.
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
90 znaków. Ponieważ jest to dużo wolnego miejsca, postanowiłem podnieść poprzeczkę i uczynić ją również wykonalną.
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 znaków. Fajnie, z wyjątkiem oczywiście dławienia się wykrzyknikiem.
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
Pesky wykrzyknik. „Chodźmy stąd” - pomyślałem! W końcu mam jedną wolną postać.
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
Oczywiście...
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))
Odkładając na bok mój kod asinine golfa - nie potrafię tego wyjaśnić.
Z \!
wykrzyknikiem udało się uciec, ale tak naprawdę nie było, ponieważ \!
pozostawiono go echo
do odebrania.
\x21
Zamiast tego można było zastosować jedno rozwiązanie , ale nie jestem przekonany, że to właściwy sposób na uniknięcie wykrzyknika w poleceniu bash.
tl; dr: Jak właściwie uciec od wykrzyknika w poleceniu bash?
źródło
!event
składni? Zawsze sprawiało mi to tylko kłopoty.!:0
!$
i!^
oszczędzam tyle czasu i pisania.Odpowiedzi:
Użyj pojedynczych cytatów:
Reguły
!
zostały później wszczepione w inne reguły cytowania (z csh). Były bardzo przydatne, gdy powłoki nie miały edycji wiersza poleceń, ale niektóre osoby nadal ich używają.PS Ponieważ kodujesz dla bash:
Działa to na większości jednorożców:
(Nie to, że rozumiem, dlaczego chcesz utworzyć skrypt lub dlaczego nazwa skryptu musi składać się z dwóch liter).
źródło
$''
. :) PS: Miało to zużyć te zapasowe postacie. Mam poczucie marnotrawstwa, gdy publikuję tweety krótsze niż 140 znaków.pwgen
vspwgen -s
..)Powinienem był googlować, zanim zapytałem.
źródło