Κατά την εκτέλεση ενός σεναρίου κελύφους, επιστρέφεται το ακόλουθο σφάλμα:
-bash: ./log_job.sh: /bin/bash^M: κακός διερμηνέας: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος Αιτίες σφάλματος:
.sh σενάριο είναι γραμμένο στο σύστημα Windows, επομένως μπορεί να υπάρχουν αόρατοι χαρακτήρες, από την παραπάνω προτροπή σφάλματος, είναι πολύ πιθανό το αρχείο σεναρίου να είναι σε μορφή DOS, δηλαδή το τέλος κάθε γραμμής να προσδιορίζεται από \r\n και ο κωδικός ASCII του να είναι 0x0D, 0x0A αντίστοιχα.
Το σφάλμα που εμφανίζεται κατά την εκτέλεση ενός σεναρίου φλοιού οφείλεται κυρίως στο γεγονός ότι το αρχείο σεναρίου φλοιού είναι σε μορφή DOS, δηλαδή το τέλος κάθε γραμμής προσδιορίζεται με \r\n και το τέλος του αρχείου μορφής UNIX προσδιορίζεται με \n.
Ειδική σημείωση: Το ^M δεν είναι το ^ και το γράμμα M που παράγεται από το πλήκτρο shift + 6, είναι ένας χαρακτήρας, το ASCII του είναι 0x0D, ο τρόπος για να το δημιουργήσετε είναι να πατήσετε πρώτα CTRL+V και μετά να εισάγετε (ή CTRL+M)
λύση
Υπάρχουν διάφοροι τρόποι για να ελέγξετε εάν το αρχείο σεναρίου είναι σε μορφή DOS ή UNIX.
(1) Ελέγξτε τη μορφή του σεναρίου: cat -A όνομα αρχείου Από τα αποτελέσματα εμφάνισης, μπορεί να κριθεί ότι η γραμμή αρχείου που τελειώνει σε μορφή dos είναι ^M$ και η γραμμή αρχείου που τελειώνει σε μορφή unix είναι $.
(2) Τροποποιήστε τη μορφή του σεναρίου: vi όνομα αρχείου για να ανοίξετε το αρχείο και να το εκτελέσετε:set ff=unixΟρίστε το αρχείο σε unix και εκτελέστε:wq, αποθηκευμένο σε μορφή UNIX.
(3) Ελέγξτε τη μορφή του σεναρίου: cat -A όνομα αρχείου Από το αποτέλεσμα εμφάνισης, μπορείτε να κρίνετε ότι η γραμμή αρχείου που τελειώνει σε μορφή dos είναι ^M$ και η γραμμή αρχείου που τελειώνει σε μορφή unix είναι $.
|