Επιδιόρθωση: Σφάλμα σύνταξης κοντά σε απροσδόκητο διακριτικό `('

Το σφάλμα σύνταξης μηνύματος σφάλματος κοντά σε μη αναμενόμενο σύμβολο `(' εμφανίζεται σε περιβάλλον τύπου Unix, Cygwin και στη διεπαφή γραμμής εντολών στα Windows.) Αυτό το σφάλμα πιθανότατα θα ενεργοποιηθεί όταν προσπαθήσετε να εκτελέσετε ένα σενάριο κελύφους το οποίο επεξεργάστηκε ή που δημιουργήθηκε σε παλαιότερα συστήματα DOS / Windows ή Mac.

Σφάλμα σύνταξης κοντά σε απροσδόκητο διακριτικό `('

Αυτό το μήνυμα σφάλματος επιδεικνύεται επίσης όταν εισάγετε εντολές στη γραμμή εντολών Linux για καθημερινές εργασίες όπως η αντιγραφή αρχείων με το χέρι κλπ. Οι κύριοι λόγοι για τους οποίους εμφανίζεται αυτό το μήνυμα λάθους είναι είτε λόγω κακής σύνταξης είτε λόγω προβλημάτων του λειτουργικού συστήματος κατά την ερμηνεία των εντολών / κέλυφος.

Τι προκαλεί το σφάλμα σύνταξης κοντά σε απροσδόκητο διακριτικό `('?

Οι λόγοι για αυτό το μήνυμα σφάλματος είναι πολύ διαφορετικοί και δεν μπορούν να αναφερθούν σε ένα άρθρο, καθώς υπάρχουν χιλιάδες πιθανότητες σύνταξης να πάει στραβά κατά την εκτέλεση εντολών. Οι βασικοί λόγοι για αυτό το σφάλμα είναι:

  • Κακή σύνταξη κατά την εκτέλεση οποιασδήποτε εντολής σε οποιαδήποτε πλατφόρμα. Είτε δεν χρησιμοποιείτε σωστά την εντολή είτε έχετε εισάγει λανθασμένη σύνταξη.
  • Το κέλυφος δεν είναι συμβατό μεταξύ συστημάτων Unix / DOS.
  • Υπάρχουν θέματα που εκτελούν το script shell bash από άλλη πηγή .

Σε αυτό το άρθρο, υποθέτουμε ότι γνωρίζετε τα βασικά της κωδικοποίησης και έχετε μια ιδέα τι κάνετε. Εάν είστε αρχάριος, είναι καλύτερο να ακολουθήσετε σε βάθος tutorials της γλώσσας / εντολής που προσπαθείτε να εκτελέσετε. Ίσως έχετε κάνει λάθος κάποια συντακτική.

Λύση 1: Έλεγχος σύνταξης και μορφοποίησης εντολών

Ο πρώτος και πρωταρχικός λόγος για τον οποίο ενδέχεται να αντιμετωπίσετε αυτό το μήνυμα σφάλματος είναι αυτό της κακής σύνταξης στον κώδικα σας ή δεν ακολουθείτε την ακριβή μορφή των εντολών. Κάθε εντολή έχει προκαθορισμένη μορφή που μπορείτε να δείτε στην τεκμηρίωσή της. Πολλές παράμετροι είναι προαιρετικές και άλλες είναι υποχρεωτικές.

Επιπλέον, πρέπει να ληφθεί μέριμνα για επιπλέον χώρο, χρήση διπλών εισαγωγικών και υποχρεωτικών παραμέτρων που απαιτούνται. Εάν κάποιο από αυτά λείπει ή έχουν δηλωθεί εσφαλμένα, δεν θα μπορείτε να εκτελέσετε τον κωδικό σας.

Για παράδειγμα, αντί του ακόλουθου κώδικα

 [mycom7] # ./ctopo.sh um_test1 [(1, 2), (2, 1)] 

Πρέπει να το εκτελέσετε ως

 [mycom7] # ./ctopo.sh um_test1 "[(1, 2), (2, 1)]" 

Επίσης, βεβαιωθείτε ότι εκτελείτε σωστά τις εντολές / κέλυφος σας, αν εκτείνεται σε αρκετές γραμμές.

Λόγω του τύπου παραμέτρου, τα διπλά εισαγωγικά είναι απαραίτητα. Ένας επιπλέον χώρος μπορεί επίσης να καταστρέψει τον κωδικό σας και να εξαναγκάσει το μήνυμα σφάλματος. Βεβαιωθείτε ότι έχετε ελέγξει την επίσημη τεκμηρίωση της εντολής που εκτελείτε και δείτε αν υπάρχει πρόβλημα εκεί.

Λύση 2: Αντιμετώπιση προβλημάτων του σεναρίου κελύφους σας

Εάν χρησιμοποιείτε μια δέσμη ενεργειών κελύφους που λειτουργεί στο σύστημα προέλευσης αλλά επιστρέφει ένα σφάλμα στο στόχο, μπορείτε να αντιμετωπίσετε τη δέσμη ενεργειών ελέγχοντας τις μεταβλητές που αποθηκεύονται κατά την εκτέλεση και, στη συνέχεια, δείτε τι προκαλεί το ζήτημα. Πρόκειται για μια πολύ συνηθισμένη αιτία, όπως σε πολλές περιπτώσεις, το κέλυφος προσπαθεί να ερμηνεύσει έναν μη αποτυπώσιμο χαρακτήρα.

Δοκιμάστε να εκτελέσετε το κέλυφος με την παράμετρο 'vx'. Αυτό θα μας δείξει ποιες εντολές τρέχουν και ποιες τιμές αποθηκεύονται στη δέσμη ενεργειών. Μέσα από αυτό μπορείτε να αντιμετωπίσετε και να διαγνώσετε τι συμβαίνει.

Για παράδειγμα, εκτελέστε το σενάριο στο τερματικό αφού συμπεριλάβετε τον όρο 'vx' ως εξής:

 # sh -vx. / test_script5.sh 

Μπορείτε να ελέγξετε τα περιεχόμενα του σεναρίου χρησιμοποιώντας την εντολή 'cat' ως εξής:

 # cat test_script5.sh 

Λύση 3: Χρήση της εντολής 'dos2unix.exe'

Στα αρχεία κειμένου των Windows / DOS, μια νέα γραμμή είναι ένας συνδυασμός Return Carriage (\ r) που ακολουθείται από μια Feed Line (\ n). Στο Mac (πριν από το Mac OS X), ένα σπάσιμο γραμμής χρησιμοποίησε απλή Επιστροφή Οχήματος (\ r). Το Unix / Linux και το Mac OS X χρησιμοποιούν τροφοδοσία γραμμής (\ n). Εάν χρησιμοποιείτε Cygwin, δεν θα επεξεργαστεί τα σενάρια που έγιναν από το DOS / Windows και τα παλαιότερα Mac, λόγω του επιπλέον χαρακτήρα Return Carriage (\ r).

Χρησιμοποιώντας την εντολή 'dos2unix.exe'

Εδώ μπορείτε να κάνετε την εντολή 'dos2unix.exe' η οποία θα μετατρέψει το σενάριο στη σωστή μορφή και στη συνέχεια μπορείτε να το εκτελέσετε χωρίς προβλήματα.

Για να ολοκληρώσετε, θα πρέπει να διερευνήσετε τις εντολές σας και τον τύπο της πλατφόρμας που χρησιμοποιείτε και να βεβαιωθείτε ότι δεν υπάρχουν αποκλίσεις. Δεδομένου ότι δεν μπορούμε να καλύψουμε κάθε πιθανότητα, θα έχετε μια ιδέα για το τι είδους σφάλματα μπορεί να συμβεί και πώς να τα διορθώσετε.

Ενδιαφέροντα Άρθρα