क्या उस स्क्रिप्ट के भीतर से कोई स्क्रिप्ट फ़ाइल निकालना सुरक्षित है?


9

कल्पना कीजिए कि मेरे पास एक स्क्रिप्ट है foo। जब उपयोगकर्ता लॉग इन करता है और एक सफल रन के बाद इसकी आवश्यकता नहीं होती है तो इसे एक बार चलाया जाना चाहिए।

मेरा प्रश्न: क्या स्क्रिप्ट फ़ाइल को स्क्रिप्ट के भीतर से निकालना सुरक्षित है?

उदाहरण के लिए:

#!/bin/bash

# do something
...

# if successful
rm /path/to/foo
exit 0

2
पूरी तरह से असंबंधित नहीं, आप #!/bin/bash -eयह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि स्क्रिप्ट फ़ाइल केवल तभी निकाल दी जाती है जब कुछ भी गलत न हो।
sr_

3
हां, यह सुरक्षित है। आप जानना चाहते हैं, तो क्यों, पढ़ stackoverflow.com/questions/2028874/...
jofel

2
@ जोफेल अच्छा लगता है, मेरा सुझाव है कि आप इसे एक उत्तर दें। :-)
htorque

यदि संदेह है तो आप अंतिम दो पंक्तियों को बदल सकते हैं exec rm /path/to/foo
कैस्परड

जवाबों:


5

इसे चलाने के दौरान शेल फ़ाइल को निकालना सुरक्षित है, क्योंकि फ़ाइल हैंडलर संबंधित फ़ाइल को स्थानांतरित करने (फिर से) से प्रभावित नहीं होते हैं।

अधिक जानकारी के लिए, यहाँ देखें ।


2
बस ध्यान रखें कि यह आपके सिस्टम के आधार पर काम नहीं rm <it-self>करेगा (यानी HP-Ux पर सफल नहीं होगा।
Ouki

1
@ ओकी, क्यों? क्या वह POSIX का उल्लंघन नहीं करेगा?
17

3
@maxschlepzig POSIX एक निष्पादन योग्य के लिए अंतिम लिंक को हटाने की अनुमति देता है जिसे वर्तमान में विफल होने के लिए निष्पादित किया जा रहा है: के unlinkसाथ विफल हो सकता है ETXTBUSY। (अजीब तरह से, "शुद्ध प्रक्रिया" और "साझा पाठ" कल्पना में परिभाषित नहीं हैं; AFAIK वे एक निष्पादन योग्य कार्यक्रम के एक घटक का मतलब है: निष्पादन योग्य खुद या एक पुस्तकालय जो इसका उपयोग करता है)। एचपी-यूएक्स के अलावा सभी प्रमुख यूनियनें निष्पादन योग्य का नाम बदलने और अनलिंक करने की अनुमति देती हैं।
गिल्स एसओ- बुराई को रोकना '

2
@Ouki के साथ स्क्रिप्ट को समाप्त करके आसानी से प्राप्त किया जाना चाहिए exec rm /path/to/foo
कैस्परड

0

मैं हमेशा इस बारे में घबराता था इसलिए मैंने ऐसा किया:

(sleep 5; rm /path/to/shell/script) &
exit 0

वैकल्पिक रूप से आप एक अस्थायी स्क्रिप्ट में चेन कर सकते हैं:

echo >/tmp/rmme rm /path/to/shell/script
. /tmp/rmme

1
आपके सुझाए गए दोनों दृष्टिकोणों में अभी भी एक शेल प्रक्रिया होगी जो स्क्रिप्ट को नष्ट करने के समय तक निष्पादित नहीं कर पाई है।
कैस्परड

आप जो करना चाहते हैं वह हैexec rm /path/to/shell/script
ऑसविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.