स्क्रिप्ट चलाते समय त्रुटि


1

मेरे पास एक सेंटोस 6.5 64-बिट समर्पित सर्वर है। केवल एक चीज जो मैंने इस पर की है yum install java7, इसलिए मैंने कोई अन्य सामान स्थापित नहीं किया है।

तो निर्देशिका में /root मैंने यह फ़ाइल बनाई है ( test.sh )

#!/bin/bash
while true
do
    echo "Hey"
        echo "You have five seconds to do 'Ctrl+C' or the while loop will continue."
    sleep 5
done

मुझे पता है कि कोड में कुछ भी गलत नहीं है, क्योंकि मैंने कुछ अन्य (आधिकारिक वेबसाइटों से) की कोशिश की है और मुझे वही त्रुटियां मिली हैं।

तो अगर मैं:

cd /root
bash test.sh

मुझे यह त्रुटि मिली

test.sh: line 7: syntax error near unexpected token `done'
test.sh: line 7: `done'

यदि मैं करता हूँ

cd /root
./test.sh

मुझे यह त्रुटि मिली

-bash: ./test.sh: Permission denied

मैंने डायरेक्टरी में भी ऐसा करने की कोशिश की है /home और मुझे वही त्रुटियां मिलती हैं।

पुनश्च। मैं SSH के माध्यम से रूट के रूप में लॉग इन हूं।


क्या करता है echo $USER कहते हैं? क्या करता है stat -c '%a' "./test.sh" कहते हैं? आपके ऊपर का कोड मेरे लिए काम करता है। क्या आप भूल गए? chmod +x /root/test.sh ?
polym

$ USER "रूट" स्टेट -क '%' a './test.sh कहता है, "644"
user3524823

आप निष्पादन योग्य ध्वज जोड़ना भूल गए। नीचे @ slhck के उत्तर को देखें। क्या कोड ऊपर है जैसा कि यहाँ प्रदर्शित है? मुझे नहीं मिलता कि आपको पंक्ति 7 त्रुटि क्यों मिलती है।
polym

इसका ठीक वैसा ही कोड। बस की नकल की और इसे दोहरी जांच के लिए चिपकाया।
user3524823

जवाबों:


3

मरम्मत करने की अनुमतियां

यह निश्चित रूप से सुनिश्चित करें कि स्क्रिप्ट निष्पादन योग्य नहीं है। उसके लिए, आपको करने की आवश्यकता है निष्पादन योग्य ध्वज सेट करें चालू उपयोगकर्ता के लिए चल रहा है:

chmod u+x /root/test.sh

तो आप इसे चलाने में सक्षम होना चाहिए:

cd /root
./test.sh

यही है, यदि आप वर्तमान में रूट के रूप में चल रहे हैं (साथ की जाँच करें) whoami )।

यदि आप चाहते हैं कि स्क्रिप्ट सिस्टम पर किसी अन्य उपयोगकर्ता द्वारा निष्पादन योग्य हो, तो उसे होना चाहिए chmod og+x ("अन्य और समूह छूटने योग्य"), हालांकि यह काम नहीं करेगा यदि स्क्रिप्ट स्वयं के तहत सहेजी जाती है /root, जो रूट के अलावा अन्य उपयोगकर्ताओं द्वारा पठनीय नहीं है।

कॉपी-पेस्ट त्रुटियों को ठीक करना

यह अपने से लगता है /bin/bash^M त्रुटि संदेश जो आपके पास है विंडोज CRLF लाइन समाप्त क्या आप वहां मौजूद हैं ( \r\n ), जो कि बस एक लिनक्स न्यूलाइन होनी चाहिए ( \n )।

इसे निकालने के लिए, आप फ़ाइल पर निम्न को चला सकते हैं:

sed -i 's/\r//' test.sh

या यह:

dos2unix test.sh

जब मैं करता हूं ।/est.sh मुझे यह त्रुटि मिलती है। -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory मैंने "ls" किया, और फ़ाइल वहाँ थी।
user3524823

आपको हैशबैंग लाइन (आपकी स्क्रिप्ट में पहली पंक्ति) में एक कॉपी-पेस्ट त्रुटि दिखाई देती है। पंक्ति के अंत में कुछ अज्ञात चरित्र। अगली पंक्ति की शुरुआत सहित इसे पूरी तरह से मिटा दें, और लिखें #!/bin/bash फिर।
slhck

क्या यह लाइन ब्रेक या कुछ और हो सकता है?
user3524823

बहुत यकीन है, हाँ। इससे छुटकारा पाने के कुछ निर्देशों के साथ मैंने अपने उत्तर को अपडेट किया।
slhck

धन्यवाद! यह अब काम करता है। ´sed -i's / \ r // 'test.shed ने इसे बनाया!
user3524823
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.