ไม่พบคำสั่งบน zsh


138

ฉันใช้ z Shell ( zsh) แทน bash เริ่มต้นและมีบางอย่างผิดปกติเกิดขึ้นทำให้ไม่รู้จักคำสั่งทั้งหมดที่เคยทำงานอีกต่อไป:

ls
zsh: command not found: ls

open -e .zshrc
zsh: correct 'open' to '_open' [nyae]? 

ฉันไม่ทราบวิธีรีเซ็ตzshหรือวิธีแก้ไข นี่คือเนื้อหาของ$PATHตัวแปร:

echo $PATH
/Users/Malloc/bin/Sencha/Cmd/3.1.2.342:/usr/local/bin/mate

ฉันไม่สามารถเปิด.bash_profileไฟล์หรือ.zshrcไฟล์ได้ดูเหมือนว่าทางออกเดียวคือการรีเซ็ตไฟล์zsh. ความคิดใด ๆ ?

แก้ไข:

ฉันพยายามรีเซ็ตzshตามที่ระบุในเธรดนี้แต่มักจะมีcommand not foundข้อผิดพลาด:

exec zsh
zsh: command not found: zsh

แล้วเกิดอะไรขึ้น? ทำไมคำสั่งทั้งหมดถึงหายไป?

คำตอบ:


218

เห็นได้ชัดว่าคุณได้จัดการกับPATHตัวแปรของคุณแล้ว (ปัจจุบันของคุณPATHไม่มีตำแหน่งที่เป็นที่ตั้งของสาธารณูปโภคทั่วไป)

ลอง:

PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
export PATH

อีกวิธีหนึ่งสำหรับการ "รีเซ็ต" zsh ให้ระบุพา ธ ที่สมบูรณ์ไปยังเชลล์:

exec /bin/zsh

หรือ

exec /usr/bin/zsh

17
เมื่อฉันอัปเกรดเป็น Catalina ฉันเปลี่ยนไปใช้ zsh shell และมันทำให้เส้นทางของฉันยุ่งเหยิงจนถึงจุดที่ฉันไม่สามารถเรียกใช้แอพของบุคคลที่สามที่ฉันใช้ ฉันต้องแก้ไขไฟล์. zshrc และเพิ่ม "export PATH = << ตำแหน่งของถังขยะของฉัน >>" และทำ exec / bin / zsh และทุกอย่างก็ดี
Robert Walters

18

ในไฟล์กำหนดค่า ~ / .zsh ของคุณมีพา ธ ไปยังไฟล์ bash path ที่มีนามแฝงของคุณ ในกรณีของฉันมันรวมบรรทัด "source ~ / .bash_profile" ไว้ใน ~ / .zsh


1
ขอบคุณมากมันแก้ไขให้ฉันได้ ฉันมีปัญหาหลังจากอัปเกรดเป็น Catalina และเปลี่ยนเป็น zsh shell
neiya

1
ฉันไม่มี~/.zshไฟล์ /etc/zshrcแต่ผมต้องใส่ไว้ใน
Chase Roberts

14
  1. ใช้โปรแกรมแก้ไขข้อความที่ดีเช่น VS Code และเปิด.zshrcไฟล์ของคุณ(ควรอยู่ในโฮมไดเร็กทอรีของคุณหากคุณไม่เห็นให้คลิกขวาในโฟลเดอร์ไฟล์เมื่อเปิดและเลือกตัวเลือกเพื่อ 'แสดงไฟล์ที่ซ่อน') .

  2. ค้นหาที่ระบุ: export PATH=a-bunch-of-paths-separated-by-colons:

  3. แทรกที่ท้ายบรรทัดก่อนเครื่องหมายคำพูดสุดท้าย: :$HOME/.local/bin

และควรได้ผลสำหรับคุณ

คุณสามารถทดสอบว่าจะได้ผลก่อนหรือไม่โดยพิมพ์สิ่งนี้ในเทอร์มินัลของคุณก่อน: export PATH=$HOME/.local/bin:$PATH

หากข้อผิดพลาดหายไปหลังจากที่คุณพิมพ์สิ่งนี้ลงในเทอร์มินัลและเทอร์มินัลของคุณทำงานได้ตามปกติวิธีแก้ปัญหาข้างต้นจะใช้งานได้ หากไม่เป็นเช่นนั้นคุณจะต้องค้นหาโฟลเดอร์ที่มีข้อผิดพลาดในการอ้างอิงของคุณ (ไม่พบสิ่งนี้) และแทนที่ PATH ด้านบนด้วย PATH-TO-THAT-FOLDER


Aha นั่นคือความผิดพลาดของฉันที่ทำให้ zsh เห็นได้ชัดว่า "ไม่สนใจ" PATHการตั้งค่าของฉัน จาก bash ฉันคุ้นเคยกับการนำหน้าไดเรกทอรีภายในโฟลเดอร์บ้านของฉันด้วย~. ดังนั้นปรากฎว่า zsh ฉันควรใช้$HOMEตัวแปรแทนเช่นในตัวอย่างของคุณ
lalilulelost

7

คุณสามารถสร้าง symlink ใน / usr / local / bin /

sudo ln -s $HOME/.composer/vendor/bin/homestead /usr/local/bin/homestead

ขอบคุณมาก. ฉันประสบปัญหาและคำตอบนี้ทำให้ฉันรู้ว่าฉันไม่ได้ใช้$HOMEและระบุเส้นทางที่เกี่ยวข้อง ใช้เส้นทางแบบเต็มเพื่อ$HOMEแก้ไขปัญหาของฉัน
tasomaniac

+1 สำหรับกรณีการใช้งานทั่วไป: การเพิ่ม symlink เป็นวิธีที่จะดำเนินการได้หากคุณต้องการเพิ่มไฟล์ปฏิบัติการเพียงรายการเดียว หากคุณต้องการจัดการไฟล์ปฏิบัติการหลายรายการในโฟลเดอร์ใหม่การเพิ่มเข้าไป$PATHจะดีกว่าในกรณีการใช้งานนั้น
David Bodow


4

ฉันแก้ไขปัญหาโดยเปิดแท็บทั่วไปความชอบเทอร์มินัลและเปลี่ยนคำสั่ง (เส้นทางที่สมบูรณ์) /bin/bashเป็นค่าเริ่มต้นจากนั้นแก้ไข~/.zshrcไฟล์

ป้อนคำอธิบายภาพที่นี่

export PATH="all your path inside the quotes"

... ไม่มีช่องว่างระหว่าง PATH="และบันทึกไฟล์

ป้อนคำอธิบายภาพที่นี่

หลังจากบันทึกไฟล์แล้วให้เปลี่ยน/bin/zshคำสั่งในคำสั่งของคุณหรือเลือกค่าเริ่มต้น ป้อนคำอธิบายภาพที่นี่

... และรีสตาร์ทเทอร์มินัลและคุณควรให้ zsh shell ทำงานอีกครั้ง!


4

ถ้าคุณชอบฉันคุณจะมีแอพเทอร์มินัลสองตัวอันหนึ่งเป็นเทอร์มินัลเริ่มต้นที่มี bash เป็นเชลล์เริ่มต้นและอีก iTerm 2 ที่มี zsh เป็นเชลล์ ในการมีทั้งคำสั่งและ zsh ใน iTerm 2 จาก bash คุณต้องทำสิ่งต่อไปนี้:

ใน iTerm 2 ไปที่การตั้งค่า (หรือคำสั่ง) จากนั้นไปที่รายละเอียดแท็บและลงไปที่คำสั่ง ดังที่คุณเห็นในภาพด้านล่างคุณต้องเลือกตัวเลือกคำสั่งและวางเส้นทางของ zsh shell (เพื่อค้นหาเส้นทางคุณสามารถทำได้which zsh)

ป้อนคำอธิบายภาพที่นี่

ณ จุดนี้คุณจะมี zsh เป็นเชลล์เริ่มต้นของคุณสำหรับ iTerm 2 เท่านั้นและคุณจะมี bash เป็นเชลล์เริ่มต้นทั่วโลกในแอปเทอร์มินัล mac เริ่มต้น ต่อไปเรายังขาดคำสั่งจาก bash ใน zsh ในการทำสิ่งนี้คุณต้องไปที่ bash ของคุณ (ซึ่งคุณมีคำสั่งของคุณทำงานอยู่) และรับตัวแปร PATH จาก env (ใช้คำสั่งนี้เพื่อทำสิ่งนั้น:env | grep PATH :)

เมื่อคุณมีแล้วให้ไปที่ iTerm 2 ของคุณและวางเส้นทางของคุณบนตัวเลือก "ส่งข้อความเมื่อเริ่มต้น"

export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin && clear

เพียงแค่เปิด iTerm 2 อีกครั้งเราก็เสร็จแล้ว!


เหตุผลที่เราเพิ่มการส่งออกไปที่ "ส่งข้อความเมื่อเริ่มต้น" ก็คือเพราะใครบางคนให้เหตุผลฉันเส้นทางจะรีเซ็ตเป็นแบบเดิมเสมอทุกครั้งที่ฉันเปิด iTerm 2 ใหม่ดังนั้นนี่จึงเป็นวิธีที่ดีในการแก้ไข
Kamil B

3

วิธีแก้ปัญหาของฉัน:

เปลี่ยนกลับเป็นbash:

source .bashrc

ต่อไป:

echo $PATH

คัดลอกสิ่งนี้:

/home/frank/.asdf/shims:/home/frank/....

กลับไปที่zsh:

source .zsh

เปิด.zshrc:

และวาง:

 export PATH=/home/frank/.asdf/shims:/home/frank/....

รีสตาร์ทเทอร์มินัล


1

ในกรณีของฉันมันเป็นความผิดพลาดโดยไม่ได้ตั้งใจรหัสความคิดเห็นไม่ได้ใส่ความคิดเห็นไว้ที่บรรทัดแรก

# If you come from bash you might have to change your $PATH.

แฮชถูกลบออก หลังจากเพิ่มกลับใช้งานได้ดี

ฉันเพิ่งโพสต์สิ่งนี้ที่นี่เพื่อให้มีคนเห็นว่าสิ่งนี้เป็นประโยชน์ เพราะมันเพิ่งเริ่มต้นบรรทัดและอาจถูกลบโดยไม่ได้ตั้งใจเหมือนที่ฉันเคยทำ และดูเหมือนจะไม่มีวิธีแก้ไขหลังจากลองหลายวิธี


1

ทางออกที่ดีที่สุดสำหรับฉันสำหรับเส้นทางการเปลี่ยนแปลงอย่างถาวร

เปิด Finder-> ไปที่โฟลเดอร์ / Users / / usr / local / bin

เปิด. zshrc ด้วย TextEdit

.zshrc เป็นไฟล์ที่ซ่อนอยู่ดังนั้นให้ยกเลิกการซ่อนโดย command + shift + กด

ลบเนื้อหาและประเภทไฟล์

ส่งออก PATH = ~ / usr / bin: / bin: / usr / sbin: / sbin: $ PATH

และบันทึก

ตอนนี้

zsh: ไม่พบคำสั่ง Gone



0

อย่างที่คนอื่น ๆ บอกเพียงแค่รีสตาร์ทเทอร์มินัลหลังจากที่คุณทำการเปลี่ยนแปลงแล้วควรรีเซ็ตและการเปลี่ยนแปลงที่คุณได้ทำกับไฟล์ ~ / .zshrc ของคุณ ตัวอย่างเช่นหลังจากเพิ่มฟังก์ชันเพื่อเปิดสตูดิโอภาพ:

function code {  
    if [[ $# = 0 ]]
    then
        open -a "Visual Studio Code"
    else
        local argPath="$1"
        [[ $1 = /* ]] && argPath="$1" || argPath="$PWD/${1#./}"
        open -a "Visual Studio Code" "$argPath"
    fi
}

ฉันสามารถใช้รหัสคำหลักเพื่อเปิดโปรแกรมจากบรรทัดคำสั่ง


0

วิธีแก้ไขไฟล์. zshrc โดยไม่ต้องทำผ่าน iTerm2 หรือเนทีฟ Terminal บน macOS คือการใช้เทอร์มินัลในแอพพลิเคชั่นอื่น ตัวอย่างเช่นฉันใช้เทอร์มินัลเป็นส่วนหนึ่งของ VSCode และสามารถค้นหาและแก้ไขไฟล์ได้


-1

ถอนการติดตั้งและติดตั้ง zsh ใหม่สำหรับฉัน:

sudo yum remove zsh
sudo yum install -y zsh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.