Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Mac

แก้ไขข้อผิดพลาด 'Command Not Found' ใน macOS Terminal: วิธีแก้ด่วนสำหรับ Zsh และ Bash

บางครั้งคุณอาจเจอข้อผิดพลาด "command not found" บน Mac เมื่อพยายามรันคำสั่งในหน้าต่าง Terminal

ตั้งแต่ Apple เปลี่ยน Default Shell จาก bash เป็น zsh ใน macOS Catalina ผู้ใช้ macOS Catalina หรือใหม่กว่าจะเห็นข้อความอย่าง "zsh: command not found: brew" แต่ผู้ใช้ macOS Mojave หรือเก่ากว่าจะเห็น error แบบ "bash: brew: command not found"

เมื่อ Terminal แสดง "command not found" หมายความว่าคำสั่งที่คุณพิมพ์ไม่อยู่ใน Search Path ของคุณ สาเหตุมีหลายอย่าง ดังนี้

แก้ไขข้อผิดพลาด "command not found" บน Mac:

  • 1. ทำไม Error 'command not found' จึงขึ้นบน Terminal ของ Mac?
  • 2. วิธีแก้ไข Error Command Not Found บน Mac

ทำไม Error 'command not found' จึงขึ้นบน Terminal ของ Mac?

คุณอาจเจอ Error Command Not Found บน Mac เมื่อเกิดเหตุการณ์ใดเหตุการณ์หนึ่งต่อไปนี้:

  • พิมพ์คำสั่งผิดพลาด (Syntax ผิด)
  • คำสั่งยังไม่ได้ติดตั้งบน Mac ของคุณ
  • คำสั่งถูกลบโดยไม่ได้ตั้งใจ หรือ System Directory ถูกแก้ไข/ลบ
  • ตัวแปร $PATH ที่ระบุไดเรกทอรีที่ต้องค้นหาคำสั่ง ไม่ครบ ถูกต้อง หรือถูกล้าง

ไม่ว่าสาเหตุอะไร สามารถทำตามคำแนะนำทั่วไปด้านล่างเพื่อแก้ไข Error "command not found" บน Mac

วิธีแก้ไข Error Command Not Found บน Mac

มีหลายกรณีเกี่ยวกับ Error "command not found" บน Mac อาจเจอ "zsh: command not found" บน Mac Monterey หรือ macOS ใดๆ ที่ใช้ zsh ปัญหาอาจเกิดกับคำสั่งใดก็ได้ นี่คือ Error Messages ที่ผู้ใช้รายงานบ่อย:

  • zsh: command not found: $
  • zsh: command not found: ls
  • zsh: command not found: brew
  • zsh: command not found: import
  • bash: brew: command not found
  • -bash: $: command not found
  • sudo: command not found
  • sudo: nano: command not found

โชคดีที่ Error เหล่านี้มักแก้ได้ด้วยวิธีแก้ไขต่อไปนี้ แนะนำลองทีละขั้นจนคำสั่งรันสำเร็จ

  • Fix 1: ตรวจสอบ Syntax ของคำสั่ง
  • Fix 2: ตั้งค่า $PATH เป็น Default macOS Path
  • Fix 3: เพิ่ม Directory ของคุณเข้า PATH
  • Fix 4: Reinstall macOS หรือ Restore จาก Time Machine

ตรวจสอบ Syntax ของคำสั่ง

ผู้ใช้ที่ไม่คุ้นเคยคำสั่งมักพลาด เช่น ลืมเว้นวรรคที่จำเป็น หรือเพิ่มสัญลักษณ์ที่ไม่จำเป็น เช่น พิมพ์ sudo nano/private/etc/hosts เพื่อแก้ไข Host files ด้วย Nano แต่วิธีถูกต้องต้องมีเว้นวรรคหลัง nano คือ sudo nano /private/etc/hosts

หรือ Copy-Paste บรรทัดอย่าง $ brew install pyqt เข้า Terminal จะได้ Error: "-bash: $: command not found" เพราะ $ แค่ตัวอย่าง Prompt ในเอกสาร ไม่ต้องพิมพ์ในคำสั่ง

ดังนั้น สิ่งแรกที่ควรตรวจสอบเมื่อเจอ Error "command not found" บน Terminal ของ Mac คือ Syntax ของคำสั่ง ดีที่สุด Copy ข้อความต้นฉบับเข้า Terminal แทนการพิมพ์เอง นอกจากนี้ เปรียบเทียบคำสั่งของคุณกับตัวอย่างอื่นที่ใช้คำสั่งเดียวกันก็ช่วยได้

ตั้งค่า $PATH เป็น Default macOS Path

Path หมายถึงตำแหน่งเฉพาะใน File System ตัวแปรระบบ PATH ($PATH) สำหรับคำสั่ง Terminal ระบุไดเรกทอรีหลายแห่งที่โปรแกรม Executable อยู่ ด้วย $PATH Mac ของคุณรู้ว่าจะค้นหาคำสั่งที่ไหน จึงไม่ต้องพิมพ์ Absolute Path ของคำสั่ง แค่ชื่ออย่าง ls

แต่ถ้า Path ที่คำสั่งที่ต้องการรันอยู่นั้น ไม่ได้ตั้งค่าไว้ จะเจอ Error "command not found" บน Mac เช่น "zsh: command not found" หรือ "zsh: command not found ls"

ในกรณีนี้ ต้องตรวจสอบก่อนว่า $PATH ที่คำสั่งอยู่ ถูกตั้งค่าด้วยขั้นตอน:

  1. เปิด Terminal
  2. รันคำสั่งต่อไปนี้เพื่อตั้งค่า Standard Path ที่ macOS ใช้ใน Command Line: export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"แก้ไขข้อผิดพลาด  Command Not Found  ใน macOS Terminal: วิธีแก้ด่วนสำหรับ Zsh และ Bash
  3. พิมพ์รหัสผ่าน กด Enter

ลองรันคำสั่งที่ล้มเหลวก่อนหน้านี้อีกครั้ง ดูว่า Error "zsh: command not found" ซ้ำอีกหรือไม่บน macOS Monterey หากยังคงมีปัญหา ไป Fix ถัดไป

เพิ่ม Directory ของคุณเข้า PATH

อีกปัญหาที่ทำให้ "zsh: command not found" บน M1 Mac คือ คำสั่งที่พิมพ์ไม่อยู่ใน Default $PATH สามารถตรวจสอบ Default $PATH ปัจจุบันได้ด้วยคำสั่งใน Terminal: echo $PATH

แก้ไขข้อผิดพลาด  Command Not Found  ใน macOS Terminal: วิธีแก้ด่วนสำหรับ Zsh และ Bash

คำสั่งนี้น่าจะให้ Default $PATH เป็น /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ซึ่งเป็น 5 ไดเรกทอรีที่ Mac ใช้กับ Command Line:

  • /usr/local/bin
  • /usr/bin
  • /bin
  • /usr/sbin
  • /sbin

หากคำสั่งที่ใช้อยู่ใน Directory ที่ไม่อยู่ใน Default เพิ่มเข้า $PATH ได้ดังนี้ ตัวอย่าง: หากเจอ Error "zsh: command not found: brew" บน Mac และสังเกตว่า Homebrew อยู่ที่ /opt/homebrew/bin แทนที่จะเป็น /usr/local/ ปกติ ทำตามขั้นตอน:

  1. เปิด Terminal
  2. รันคำสั่งเพื่อเพิ่ม Directory ใหม่ (เช่น /opt/homebrew/bin) เข้า $PATH ชั่วคราว: export PATH=$PATH:/opt/homebrew/bin
  3. ตรวจสอบว่า Directory ใหม่เพิ่มแล้วด้วยคำสั่ง echo: echo $PATH

ทดสอบว่าคำสั่งที่ต้องการทำงานได้หรือยัง หากต้องการให้การเปลี่ยนแปลง Path คงอยู่ถาวร ต้องเพิ่มลงในไฟล์ .zshrc, .bash_profile หรือ .bashrc ขึ้นอยู่กับ Shell ที่ใช้ ทำตามขั้นตอน:

  1. รันคำสั่งใน Terminal เพื่อเข้าสู่ Home Directory: cd
  2. ใช้คำสั่งลิสต์ไฟล์ใน Home Directory ตรวจสอบว่ามีไฟล์ .zshrc หรือไม่ (หากใช้ zsh): ls -la
  3. หากยังไม่มี สร้างด้วย Nano Editor: touch .zshrc มิฉะนั้น ข้ามไปขั้นตอน 4
  4. รันคำสั่งแก้ไข .zshrc ด้วย Nano: nano .zshrc
  5. รันคำสั่งเพิ่ม Directory ใหม่ (เช่น /opt/homebrew/bin) ลง .zshrc: export PATH=$PATH:/opt/homebrew/bin
  6. ปิด Terminal และเปิดใหม่

สมมติวิธีนี้ไม่ได้ผล อ่านต่อไป Fix ต่อไปเพื่อแก้ "zsh: command not found" บน M1 Mac หรือ Intel Mac ของคุณ

Reinstall macOS หรือ Restore จาก Time Machine

หากคุณเคยขุดขุดในระบบและลบไฟล์/โฟลเดอร์ระบบบางอย่างโดยไม่ได้ตั้งใจ อาจลบไฟล์ที่จำเป็นต่อคำสั่ง Terminal ไป ในกรณีนี้ ต้องกู้คืนไฟล์ระบบเหล่านั้น

สามารถเลือก Restore กลับสู่สถานะก่อนหน้า หากเคย Backup Mac ด้วย Time Machine มิฉะนั้น สามารถ Reinstall macOS โดยไม่ Format ไดรฟ์ โปรดทราบว่าแม้ Reinstall OS ไม่ควรทำให้สูญเสียข้อมูล แต่น่าจะ Backup ไฟล์สำคัญไว้ก่อนก่อนดำเนินการ