Hôm nay, tôi đã bị bắt quả tang khi đang cố mã hóa trình tạo mật khẩu cho Twitter.
import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))
90 ký tự. Vì đó là rất nhiều không gian trống, tôi quyết định nâng thanh và làm cho nó thực thi được.
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 ký tự. Tốt đẹp, ngoại trừ rõ ràng bash cuộn cảm vào dấu chấm than.
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
Dấu chấm than. "Hãy thoát khỏi nó," tôi nghĩ! Tôi có một nhân vật phụ tùng sau tất cả.
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
Chắc chắn...
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))
Bỏ golf asinine của tôi sang một bên - tôi không thể giải thích điều này.
Với \!
, dấu chấm than đã được thoát ra, ngoại trừ nó thực sự không phải, bởi vì cái \!
còn lại là echo
để lấy.
Một giải pháp có thể đã được sử dụng \x21
thay thế, nhưng tôi không tin đó là cách thoát khỏi dấu chấm than thích hợp trong lệnh bash.
tl; dr: Làm thế nào để bạn thoát khỏi dấu chấm than trong lệnh bash?
!event
cú pháp ở nơi đầu tiên? Nó luôn luôn gây rắc rối cho tôi.