การแก้ไข: ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นที่ไม่คาดคิด `('
ข้อความแสดงข้อผิดพลาดทาง ไวยากรณ์ผิดพลาดใกล้กับโทเค็นที่ไม่คาดคิด `(' เกิดขึ้นในสภาพแวดล้อม Unix-type, Cygwin และในอินเตอร์เฟสบรรทัดคำสั่งใน Windows ข้อผิดพลาดนี้มักจะถูกเรียกใช้เมื่อคุณพยายามเรียกใช้เชลล์สคริปต์ที่แก้ไขหรือ สร้างขึ้นในระบบ DOS / Windows หรือ Mac รุ่นเก่า
ข้อความแสดงข้อผิดพลาดนี้ยังปรากฏขึ้นเมื่อคุณป้อนคำสั่งในบรรทัดคำสั่ง Linux สำหรับงานประจำวันเช่นการคัดลอกไฟล์ด้วยตนเองเป็นต้นเหตุผลหลักที่ทำให้ข้อความแสดงข้อผิดพลาดนี้เกิดขึ้นเนื่องจากไวยากรณ์ผิดพลาดหรือปัญหาของระบบปฏิบัติการในการตีความคำสั่งของระบบอื่น ๆ เปลือก.
ทำให้เกิดข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นที่ไม่คาดคิด `('คืออะไร)
สาเหตุของข้อความแสดงข้อผิดพลาดนี้มีความหลากหลายมากและไม่สามารถระบุไว้ในบทความเดียวเนื่องจากมีความเป็นไปได้ที่ไวยากรณ์ผิดพลาดเมื่อเรียกใช้คำสั่ง สาเหตุหลักของข้อผิดพลาดนี้คือ:
- ไวยากรณ์ไม่ถูกต้อง เมื่อดำเนินการคำสั่งใด ๆ ในแพลตฟอร์มใดแพลตฟอร์มหนึ่ง ไม่ว่าคุณจะใช้คำสั่งไม่ถูกต้องหรือป้อนไวยากรณ์ผิด
- เชลล์ไม่ สามารถทำงานร่วมกันได้ ระหว่างระบบ Unix / DOS
- มีปัญหาในการใช้งานสคริปต์เชลล์ bash จาก แหล่งอื่น
ในบทความนี้เราคิดว่าคุณรู้พื้นฐานของการเข้ารหัสและมีความคิดว่าคุณกำลังทำอะไรอยู่ หากคุณเป็นผู้เริ่มต้นจะเป็นการดีที่สุดที่คุณจะทำตามบทช่วยสอนเชิงลึกของภาษา / คำสั่งที่คุณพยายามเรียกใช้ คุณอาจทำผิดไวยากรณ์บางอย่าง
โซลูชันที่ 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 บรรทัดใหม่คือการรวมกันของ Carriage Return (\ r) ตามด้วย Line Feed (\ n) ใน Mac (ก่อน Mac OS X) ตัวแบ่งบรรทัดใช้ Carriage Return (\ r) แบบง่าย Unix / Linux และ Mac OS X ใช้ตัวแบ่งบรรทัด (\ n) ตัวแบ่งบรรทัด หากคุณใช้ Cygwin จะไม่สามารถประมวลผลสคริปต์ที่ทำโดย DOS / Windows และ Mac รุ่นเก่าได้เนื่องจากอักขระพิเศษ Carriage Return (\ r)
ที่นี่คุณสามารถใช้คำสั่ง 'dos2unix.exe' ซึ่งจะแปลงสคริปต์เป็นรูปแบบที่ถูกต้องแล้วคุณสามารถดำเนินการได้โดยไม่มีปัญหาใด ๆ
ในการสรุปคุณต้องศึกษาคำสั่งและประเภทของแพลตฟอร์มที่คุณใช้และตรวจสอบให้แน่ใจว่าไม่มีความแตกต่าง เนื่องจากเราไม่สามารถครอบคลุมความเป็นไปได้ทุกข้อคุณจะมีความคิดว่าข้อผิดพลาดประเภทใดที่สามารถเกิดขึ้นได้และวิธีแก้ไข