डेबियन में स्टार्टअप स्क्रिप्ट को निष्पादित करने की कोशिश करते समय ऐसी कोई फ़ाइल या निर्देशिका त्रुटि नहीं


11

डेबियन (रास्पबियन) के लिए बहुत नया है, और मैं कुछ दिनों के लिए इस पर संघर्ष कर रहा हूं। मेरे पास एक स्टार्टअप स्क्रिप्ट है जिसे मैं स्टार्टअप में निष्पादित करना चाहता हूं।

मैंने स्क्रिप्ट को निष्पादन योग्य बनाने और इसे डिफ़ॉल्ट अनुक्रमों के साथ स्टार्टअप अनुक्रम में जोड़ने के लिए, निम्नलिखित कमांड निष्पादित किए हैं।

sudo chmod 755 /etc/init.d/testsam
sudo update-rc.d testsam defaults

स्क्रिप्ट का परीक्षण करने का प्रयास करते समय, मैं निम्नलिखित कार्य करता हूं:

sudo /etc/init.d/testsam start

लेकिन ऐसा करते समय, मुझे एक त्रुटि मिलती है: /etc/init.d/testsam निष्पादित करने में असमर्थ: ऐसी कोई फ़ाइल या निर्देशिका नहीं।

मैंने स्क्रिप्ट को बहुत ही बुनियादी बना दिया, लेकिन फिर भी वास्तविक कारण का कोई सुराग नहीं है। मुझे आशा है कि कोई मुझे सही समाधान के लिए इंगित कर सकता है? यह वर्तमान में स्क्रिप्ट है।

#! /bin/bash

# /etc/init.d/testsam

case "$1" in
 start)
        #echo "starting script"
        ;;
 stop)
        #echo "stopping script"
        ;;
 *)
        #echo "Usage: /etc/init.d/testsam {start|stop}"
        exit 1
         ;;
esac

exit 0

किसी भी मदद के लिए धन्यवाद

जवाबों:


22

संभवतः ^Mआपकी #!पंक्ति के अंत में आपके पास एक गाड़ी वापसी ( ) है ।

#!लाइन का प्रारूप बहुत सख्त है, और गाड़ी वापसी की अनुमति नहीं है, जब तक कि आपके दुभाषिया को वास्तव में नहीं कहा जाता है/bin/bash^M

एक उचित यूनिक्स संपादक के साथ बनाई गई फ़ाइल में कभी भी गाड़ी का रिटर्न नहीं होगा, जब तक कि आप उन्हें जोड़ने के लिए अपने रास्ते से बाहर नहीं जाते हैं।

मौजूदा फ़ाइल का संपादन करते समय जो पहले से ही CRLF लाइन एंडिंग्स का उपयोग करती है, गाड़ी का रिटर्न आपसे छिपाया जा सकता है। उदाहरण के लिए, विम ऐसा करता है। लेकिन यह [dos]स्टेटस लाइन में आपको चेतावनी देने के लिए भी कहता है कि फाइल डॉस फॉर्मेट में है। फिर आप :set fileformat=unixफ़ाइल को कनवर्ट करने के लिए कह सकते हैं और सहेज सकते हैं ।


5
यह सत्यापित करने के लिए कि क्या यह वास्तव में समस्या है, करते हैं cat -v /etc/inti.d/testsam। यदि आपके पास एक गलत कैरिज रिटर्न है, तो यह दिखाई देगा ^M
जेनी डी

तेजी से मदद के लिए धन्यवाद! मैं wget कमांड के माध्यम से फाइल प्राप्त किया था और यह वास्तव में एक विंडोज़ आधारित फ़ाइल थी।
सैम वानहूटे

कुछ सर्वरों पर मैं उपयोग कर सकता हूं dos2unixलेकिन जब आप उस आदेश को सभी उदाहरणों को मिटाने की अनुमति नहीं देते हैं तो आप क्या करते हैं ^M?
user33777

1
इस मुद्दे को ठीक करने का दूसरा तरीका:sed -i -e 's/\r//g' /path/file
अल बेल्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.