बश में विस्मयादिबोधक बिंदुओं को कैसे ठीक से बचाना है?


11

आज, मैं ट्विटर के लिए एक पासवर्ड जनरेटर गोल्फ को कोड करने का प्रयास करते हुए रंगे हाथों पकड़ा गया।

import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))

90 चरस। चूंकि यह बहुत अधिक खाली स्थान है, इसलिए मैंने बार को बढ़ाने और इसे निष्पादन योग्य बनाने का फैसला किया।

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 वर्ण। अच्छा है, सिवाय इसके कि विस्मयादिबोधक बिंदु पर चोट के निशान।

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

पेस्की विस्मयादिबोधक बिंदु। "चलो इसे से बचने," मैंने सोचा! मेरे पास एक के बाद एक चरित्र हैं।

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

जाहिर है...

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))

अपने असिन कोड को एक तरफ छोड़ते हुए - मैं इसे समझा नहीं सकता।

इसके साथ \!, विस्मयादिबोधक बिंदु बच गया था, सिवाय इसके कि यह वास्तव में नहीं था, क्योंकि इसे लेने के \!लिए छोड़ दिया गया था echo

\x21इसके बजाय एक समाधान का उपयोग किया जा सकता था , लेकिन मैं आश्वस्त नहीं हूं कि बैश कमांड में एक विस्मयादिबोधक बिंदु से बचने का उचित तरीका है।

tl; डॉ: कैसे आप ठीक ढंग से एक बैश आदेश में एक विस्मयादिबोधक बिंदु भागने करते हैं?


क्या कोई वास्तव!event में पहले स्थान पर वाक्य रचना का उपयोग करता है? यह हमेशा मुझे ही परेशान करता है।
badp

मैं इसे लगभग दैनिक उपयोग करता हूं, (पिछले 20 वर्षों के अधिकांश के लिए।) !:0 !$और !^इतना समय और टाइपिंग बचाना।
एलेक्स रॉश

जवाबों:


7

एकल उद्धरण का उपयोग करें:

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

इसके !बाद के नियम दूसरे उद्धृत नियमों के बाद (csh से) तरह के थे। वे बहुत उपयोगी थे जब शेल में कमांड लाइन संपादन नहीं था, लेकिन कुछ लोग अभी भी उनका उपयोग करते हैं।

PS चूंकि आप बैश के लिए कोडिंग कर रहे हैं:

echo $'#!/usr/bin/python\nimport string as s,random;print"".join(random.sample(s.letters+s.digits+s.punctuation,9))'>pg;chmod +x pg;./pg

यह अधिकांश यूनियनों पर काम करता है:

echo python -c \''import string as s,random;print"".join(random.sample(s.letters+s.digits+s.punctuation,9))'\'>pg;chmod +x pg;./pg

(ऐसा नहीं है कि मैं समझता हूं कि आप स्क्रिप्ट क्यों बनाना चाहते हैं या स्क्रिप्ट नाम दो अक्षरों का क्यों होना चाहिए।)


के बारे में नहीं पता था $''। :) PS: यह उन अतिरिक्त वर्णों का उपयोग करने का प्रयास करना था। जब मैं १४० अक्षरों से छोटा ट्वीट करता हूं तो मुझे बर्बादी का अहसास होता है।
badp

@badp: इसलिए इसे यादगार पासवर्ड बनाने की कोशिश करें । ( pwgenबनाम में pwgen -s।)
गिल्स एसओ- बुराई को रोकना '

के रूप में अच्छी तरह से यादगार लेकिन निरर्थक पासफ़्रेज़ के लिए डेडाडोडो का उपयोग कर सकते हैं :)
badp

1

मेरे कहने से पहले मुझे गोगल करना चाहिए था।

चूँकि आप चर का विस्तार करने के लिए बैश पर निर्भर नहीं होते हैं [..] इसके बजाय आप एकल उद्धरणों का उपयोग कर सकते हैं। सिंगल कोट्स में स्ट्रिंग्स का विस्तार बैश द्वारा नहीं किया जाता है।

हार्न में जबाब करने के लिए मैं एक विस्मयादिबोधक चिह्न कैसे बच सकता हूँ?


1
मैं इस जवाब को स्वीकार नहीं कर रहा हूं, हालांकि, क्योंकि यह केवल इस विशिष्ट मामले का जवाब देता है। आम तौर पर, आप बिना विस्तार के दूर नहीं हो सकते।
badp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.