bad interpreter — DedSec Project
bad interpreter: έλεγχος shebang και CRLF Αναγνώριση της πραγματικής αποτυχίας Το executable script αρχίζει με ! που επιλέγει interpreter. Το bad interpreter συχνά σημαίνει λάθος path μετά…
bad interpreter: έλεγχος shebang και CRLF
Αναγνώριση της πραγματικής αποτυχίας
Το executable script αρχίζει με #! που επιλέγει interpreter. Το bad interpreter συχνά σημαίνει λάθος path μετά το #!· CRLF μπορεί να προσθέσει carriage return στο όνομα. Το script μπορεί να υπάρχει αλλά να λείπει ο interpreter.
Ασφαλής αρχικός έλεγχος
head -n 1 script.sh | od -An -tx1
command -v bash
file script.sh
Διόρθωση αιτίας χωρίς παράκαμψη προειδοποίησης
Χρησιμοποίησε #!/usr/bin/env bash όταν υπάρχουν env/bash και το script είναι Bash. Σε Termux το /bin/bash από Linux συνήθως είναι λάθος· δες command -v bash. Διόρθωσε CRLF σε αντίγραφο αφού το επαληθεύσεις και μη χρησιμοποιείς sudo ως παράκαμψη.
Τεκμηρίωση: https://www.gnu.org/software/bash/manual/html_node/Shell-Scripts.html
Πώς εμφανίζεται το «bad interpreter»
Το kernel διαβάζει την πρώτη γραμμή #! και προσπαθεί να ξεκινήσει το δηλωμένο πρόγραμμα. Αν το script μεταφέρθηκε από Windows με CRLF, το μονοπάτι μπορεί να περιλαμβάνει αόρατο \r και να εμφανίζεται σφάλμα όπως /bin/bash^M: bad interpreter. Έλεγξε χωρίς να τρέξεις το αρχείο:
head -n 1 ./demo.sh | cat -v
od -An -tx1 -N40 ./demo.sh
command -v bash
Η ακολουθία 0d 0a στο τέλος της πρώτης γραμμής δείχνει CRLF, ενώ 0a μόνο του είναι LF. Αποθήκευσε το αρχείο ως κείμενο με LF μέσα από editor και δοκίμασε ξανά. Μην εφαρμόζεις μετατροπές κειμένου σε αυθαίρετα binary αρχεία.
Διαφορετικό περιβάλλον, διαφορετικός interpreter
Το #!/bin/bash είναι συνηθισμένο σε desktop Linux, αλλά το Bash του Termux βρίσκεται σε διαφορετική δομή φακέλων. Το #!/usr/bin/env bash βοηθά όταν υπάρχει env στο συγκεκριμένο μονοπάτι και το bash είναι διαθέσιμο στο PATH· δεν αποτελεί εγγύηση για κάθε Android περιβάλλον. Σε Windows χρειάζεσαι κατάλληλο POSIX shell για τέτοιο script, όχι cmd.exe.
Δοκιμή που ξεχωρίζει τα αίτια
Σύγκρινε απευθείας ./demo.sh με bash demo.sh σε ένα δικό σου ακίνδυνο script. Αν η δεύτερη εντολή λειτουργεί, αλλά η πρώτη όχι, η αιτία μπορεί να είναι η πρώτη γραμμή ή το executable bit. Αν αποτυγχάνουν και οι δύο, εξέτασε τη σύνταξη και την πραγματική εγκατάσταση του Bash.