निम्न स्क्रिप्ट स्वयं को क्यों हटाता है?


84

यदि आप निम्नलिखित सामग्रियों के साथ एक निष्पादन योग्य फ़ाइल बनाते हैं, और इसे चलाते हैं, तो यह स्वयं को हटा देगा।
यह कैसे काम करता है?

#!/bin/rm


@DigitalTrauma हेह, यह देखने के बाद मेरा पहला विचार था।
बिल्ली

इसके बारे में नहीं है rm, यह के बारे में है #!। इस सवाल पर फिर से विचार किया जा सकता है कि किसी #!कार्य के साथ कोई निष्पादन योग्य स्क्रिप्ट कैसे होती है ।
njzk2

1
आपने इस पर ठोकर खाने का प्रबंधन कैसे किया?
user1717828

1
यह निश्चित रूप से एक महाकाव्य प्रश्न है। मुझे अफसोस है कि मैं इसे केवल एक बार उखाड़ सकता हूं।
डैनिला किवर

जवाबों:


112

कर्नेल रेखा के साथ शुरू होने वाली व्याख्या #!करता है और इसका उपयोग स्क्रिप्ट को चलाने के लिए करता है, स्क्रिप्ट के नाम में गुजरता है; तो यह समाप्त होता है

/bin/rm scriptname

जो स्क्रिप्ट को हटा देता है। (जैसा कि स्टीफन चेज़लस बताते हैं , scriptnameयहां स्क्रिप्ट को खोजने के लिए पर्याप्त है - यदि आपने एक रिश्तेदार या निरपेक्ष पथ निर्दिष्ट किया है, जो कि इस तरह से पारित हो गया है, अन्यथा जो भी मार्ग में पाया गया था PATHवह पूर्वनिर्मित है, जिसमें संभवतः खाली स्ट्रिंग भी PATHशामिल है यदि आपका और स्क्रिप्ट वर्तमान निर्देशिका में है। आप इको स्क्रिप्ट के साथ खेल सकते हैं - #!/bin/echo- यह देखने के लिए कि यह कैसे काम करता है।)

जैसा कि हॉब्स ने बताया, इसका मतलब है कि आपकी स्क्रिप्ट वास्तव में एक rmस्क्रिप्ट है, न कि एक bashस्क्रिप्ट - उत्तरार्द्ध के साथ शुरू होगा #!/bin/bash

देखें कि लिनक्स में यह कैसे काम करता है, इसके विवरण के लिए कार्यक्रम कैसे चलते हैं ; उस लेख की टिप्पणियाँ अन्य प्लेटफार्मों के लिए विवरण देती हैं। #!एक शबंग कहा जाता है, आपको उस शब्द को खोजने के लिए बहुत सारी जानकारी मिलेगी ( सुझाव के लिए आरोन का धन्यवाद )। जैसा कि जेएलपी ने बताया है, आप इसे "पाउंड बैंग" या "हैश बैंग" के रूप में भी देखेंगे ( #इसे आमतौर पर "पाउंड" के रूप में जाना जाता है - उन देशों में जो उपयोग नहीं करते हैं £- या "हैश", और !"बैंग" के रूप में। )। विकिपीडिया में अधिक जानकारी है।


9
"#" के अन्य नाम आप सुन सकते हैं "पाउंड बैंग" और "हैश बैंग"। देखें en.wikipedia.org/wiki/Shebang_(Unix) जानकारी के लिए।
jlp

@jlp पाउंड बैंग? क्या यह "आपके हिरन के लिए धमाका" जैसा है? हेह ...
बिल्ली

मुझे ol की याद दिलाता है ' CrunchBang
Xen2050

1
तकनीकी रूप से, स्क्रिप्ट के लिए तर्क मार्गrm होगा , यह प्रक्रिया द्वारा किए गए सिस्टम कॉल को निष्पादित () करने के लिए पहला तर्क है। आमतौर पर, यदि आप स्क्रिप्ट को इस रूप में चलाते हैं, तो यह होगा और यदि आप इसे इस रूप में लागू करते हैं , तो वह वही होगा जहां प्रविष्टि उस स्क्रिप्ट में मिली थी। आमतौर पर, यह होगा केवल द्वारा आप में रिक्त स्ट्रिंग है, तो और आप स्क्रिप्ट लागू किया है के रूप में और मौजूदा निर्देशिका में है। ./scriptname./scriptnamescriptname/path/to/scriptname/path/to$PATHscriptname$PATHscriptnamescriptname
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.