Thông báo lỗi lỗi cú pháp gần mã thông báo không mong muốn '(‘ xảy ra trong môi trường kiểu Unix, Cygwin và trong giao diện dòng lệnh trong Windows. Lỗi này rất có thể sẽ được kích hoạt khi bạn cố chạy một tập lệnh shell đã được chỉnh sửa hoặc tạo trong các hệ thống DOS / Windows hoặc Mac cũ hơn.
Thông báo lỗi này cũng xuất hiện khi bạn đang nhập lệnh trong dòng lệnh Linux cho các tác vụ hàng ngày như sao chép tệp theo cách thủ công, v.v. Các lý do chính khiến thông báo lỗi này xảy ra là do cú pháp sai hoặc vấn đề của hệ điều hành trong việc diễn giải các lệnh của hệ thống khác / vỏ.
Nguyên nhân nào gây ra Lỗi cú pháp gần mã thông báo không mong muốn `(‘?
Các lý do cho thông báo lỗi này rất đa dạng và không thể liệt kê hết trong một bài báo vì có hàng ngàn khả năng sai cú pháp khi thực hiện lệnh. Các lý do cốt lõi cho lỗi này là:
- Cú pháp sai khi thực hiện bất kỳ lệnh nào trong cả hai nền tảng. Có thể là bạn đang sử dụng lệnh không chính xác hoặc nhập sai cú pháp.
- Vỏ không tương thích giữa các hệ thống Unix / DOS.
- Có sự cố khi chạy tập lệnh bash shell từ nguồn khác .
Trong bài viết này, chúng tôi giả định rằng bạn biết những điều cơ bản về mã hóa và có ý tưởng về những gì bạn đang làm. Nếu bạn là người mới bắt đầu, tốt nhất là bạn nên làm theo các hướng dẫn chuyên sâu về ngôn ngữ / lệnh mà bạn đang cố gắng thực thi. Có thể bạn đã mắc lỗi cú pháp nào đó.
Giải pháp 1:Kiểm tra Cú pháp và Định dạng của lệnh
Lý do đầu tiên và quan trọng nhất khiến bạn có thể gặp thông báo lỗi này là do cú pháp sai trong mã của bạn hoặc bạn không tuân theo định dạng chính xác của lệnh. Mỗi lệnh có một định dạng được xác định trước mà bạn có thể xem trong tài liệu của nó. Một số tham số là tùy chọn và những tham số khác là bắt buộc.
Hơn nữa, cần lưu ý thêm về không gian thêm , sử dụng dấu ngoặc kép và bắt buộc tham số bắt buộc. Nếu bất kỳ mã nào bị thiếu hoặc được khai báo không chính xác, bạn sẽ không thể thực thi mã của mình.
Ví dụ:thay vì mã sau
[mycom7] # ./ctopo.sh um_test1 [(1,2),(2,1)]
Bạn cần thực thi nó dưới dạng
[mycom7] # ./ctopo.sh um_test1 "[(1,2),(2,1)]"
Ngoài ra, hãy đảm bảo rằng bạn đang thực thi các lệnh / tập lệnh shell của mình một cách chính xác nếu nó kéo dài nhiều dòng.
Vì loại tham số, dấu ngoặc kép là cần thiết. Khoảng trống thừa cũng có thể làm hỏng mã của bạn và buộc thông báo lỗi. Đảm bảo rằng bạn kiểm tra tài liệu chính thức của lệnh bạn đang thực thi và xem có sự cố ở đó không.
Giải pháp 2:Khắc phục sự cố tập lệnh shell của bạn
Nếu đang sử dụng tập lệnh shell hoạt động trong hệ thống nguồn nhưng trả về lỗi trong đích, bạn có thể khắc phục sự cố tập lệnh bằng cách kiểm tra các biến được lưu trữ trong quá trình thực thi và sau đó xem điều gì đang gây ra sự cố. Đây là một nguyên nhân rất phổ biến vì trong một số trường hợp, trình bao cố gắng diễn giải một ký tự không in được.
Hãy thử chạy trình bao với tham số là ‘vx’. Điều này sẽ cho chúng ta thấy những lệnh nào đang được chạy và những giá trị nào được lưu trữ trong tập lệnh. Qua đây, bạn có thể khắc phục sự cố và chẩn đoán điều gì đang xảy ra.
Ví dụ:thực thi tập lệnh trong thiết bị đầu cuối sau khi bao gồm ‘vx’ là:
# sh -vx ./test_script5.sh
Bạn có thể kiểm tra nội dung của tập lệnh bằng lệnh ‘cat’ như:
# cat test_script5.sh
Giải pháp 3:Sử dụng lệnh ‘dos2unix.exe’
Trong các tệp văn bản Windows / DOS, một dòng mới là sự kết hợp của Chuyển hàng trở lại (\ r) theo sau là Nguồn cấp dòng (\ n). Trong Mac (trước Mac OS X), dấu ngắt dòng sử dụng Dấu chuyển hàng đơn giản (\ r). Unix / Linux và Mac OS X sử dụng ngắt dòng Nguồn cấp dữ liệu dòng (\ n). Nếu bạn đang sử dụng Cygwin, nó sẽ không xử lý được các tập lệnh được tạo bởi DOS / Windows và Mac cũ hơn do có thêm ký tự Carriage Return (\ r).
Tại đây, bạn có thể tạo lệnh ‘dos2unix.exe’, lệnh này sẽ chuyển đổi tập lệnh sang định dạng chính xác và sau đó bạn có thể thực thi nó mà không gặp bất kỳ sự cố nào.
Để kết luận, bạn cần nghiên cứu các lệnh và loại nền tảng bạn đang sử dụng và đảm bảo không có bất kỳ sự khác biệt nào. Vì chúng tôi không thể đề cập đến từng và mọi khả năng, bạn sẽ có ý tưởng về những loại lỗi nào có thể xảy ra và cách khắc phục chúng.