Khắc phục: Lỗi cú pháp gần mã thông báo bất ngờ `('

Lỗi cú pháp thông báo lỗi 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 có thể sẽ được kích hoạt khi bạn cố chạy tập lệnh shell được chỉnh sửa hoặc được tạo trong các hệ thống DOS / Windows hoặc Mac cũ hơn.

Lỗi cú pháp gần mã thông báo bất ngờ `('

Thông báo lỗi này cũng xuất hiện khi bạn đang nhập các 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 ... 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 sự cố của HĐH trong việc diễn giải các lệnh của hệ thống khác / vỏ.

Điều gì gây ra Lỗi cú pháp gần mã thông báo bất ngờ `('?

Các lý do cho thông báo lỗi này rất đa dạng và không thể được liệt kê trong một bài viết vì có hàng ngàn khả năng cú pháp bị sai khi thực hiện các lệnh. Những lý do cốt lõi cho lỗi này là:

  • Cú pháp xấu khi thực hiện bất kỳ lệnh nào trong một trong hai nền tảng. Hoặc bạn không sử dụng lệnh chính xác hoặc đã nhập sai cú pháp.
  • Shell không tương thích giữa các hệ thống Unix / DOS.
  • Có vấn đề khi chạy tập lệnh bash shell từ mộ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 bạn nên theo dõi 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 hiện. Bạn có thể đã phạm sai lầm của một số cú pháp.

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 gặp phải 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 các lệnh. Mỗi lệnh có một định dạng được xác định trước mà bạn có thể thấy trong tài liệu của nó. Một số tham số là tùy chọn mà những người khác là bắt buộc.

Hơn nữa, cần hết sức cẩn thận để có thêm không gian, sử dụng dấu ngoặc kép và các tham số bắt buộc cần có. Nếu bất kỳ trong số chúng 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ì đoạn mã sau

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

Bạn cần phải thực hiện nó như là

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

Ngoài ra, hãy chắc chắn rằng bạn đang thực thi chính xác các lệnh / shell script nếu nó đang trải dài trên một vài dòng.

Do loại tham số, dấu ngoặc kép là cần thiết. Một không gian thừa cũng có thể làm hỏng mã của bạn và buộc thông báo lỗi. Hãy chắc chắn rằng bạn kiểm tra tài liệu chính thức của lệnh bạn đang thực hiện và xem có vấn đề gì ở đó không.

Giải pháp 2: Khắc phục sự cố kịch bản 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 mục tiêu, bạn có thể khắc phục sự cố 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ì 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, shell cố gắng diễn giải một ký tự không thể in được.

Hãy thử chạy shell với tham số '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. Thông qua đây bạn có thể khắc phục sự cố và chẩn đoán những 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ư:

 # mèo 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 Trả về vận chuyển (\ r) theo sau là Nguồn cấp dữ liệu (\ n). Trong Mac (trước Mac OS X), ngắt dòng đã sử dụng Trả về vận chuyển đơn giản (\ r). Unix / Linux và Mac OS X sử dụng ngắt dòng Line Feed (\ n). Nếu bạn đang sử dụng Cygwin, nó sẽ thất bại trong việc xử lý các tập lệnh được tạo bởi DOS / Windows và Mac cũ hơn do có thêm ký tự Vận chuyển trở lại (\ r).

Sử dụng lệnh 'dos2unix.exe'

Tại đây, bạn có thể tạo lệnh 'dos2unix.exe' để chuyển đổi tập lệnh thành định dạng chính xác và sau đó bạn có thể thực thi nó mà không gặp vấn đề gì.

Để 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ể bao gồm từng khả năng, bạn sẽ có ý tưởng về loại lỗi nào có thể xảy ra và cách khắc phục chúng.

Bài ViếT Thú Vị