ไม่สามารถเรียกใช้โปรแกรมหนึ่งจากเทอร์มินัลโดยไม่ใช้เส้นทางแบบเต็ม


9

ฉันต้องการเรียกใช้โปรแกรมds9จากเทอร์มินัล โปรแกรมชัดเจนใน PATH ซึ่งฉันพิจารณาจากการรัน:

which ds9
/Users/evgenii/miniconda3/envs/iraf/bin/ds9

แต่เมื่อฉันรันคำสั่งด้วยการพิมพ์ds9มันจะแสดงข้อผิดพลาดต่อไปนี้ให้ฉัน:

-bash: /Applications/ds9.app/Contents/MacOS/ds9: No such file or directory

ฉันยังคงสามารถใช้งานได้ดีหากใช้เส้นทางแบบเต็มดังนี้:

/Users/evgenii/miniconda3/envs/iraf/bin/ds9

เกิดอะไรขึ้น? ทำไมมันพยายามที่จะใช้/Applications/ds9.app?

การอนุญาตมีดังนี้:

-rwxrwxr-x@ 1 evgenii  staff  18613852  9 Nov 20:13 /Users/evgenii/miniconda3/envs/iraf/bin/ds9

ปรับปรุง:

นี่คือผลลัพธ์ของการรันtype -a ds9คำสั่ง:

type -a ds9
ds9 is aliased to `/Applications/ds9.app/Contents/MacOS/ds9 -xpa no'
ds9 is /Users/evgenii/miniconda3/envs/iraf/bin/ds9

4
whichอย่าใช้ มันเป็นโปรแกรมภายนอกดังนั้นจึงไม่สามารถบอกได้เกี่ยวกับชื่อแทนเชลล์
Barmar

Receipe ไปทำงานด้วยคำสั่งใช้งาน: ใช้PATHมากกว่าaliasและมากกว่าtype which
แดน

คำตอบ:


19

เห็นได้ชัดว่าคำสั่งเป็นนามแฝงกับนามแฝงที่ใช้งานไม่ได้ ขั้นแรกตรวจสอบการจับคู่ทั้งหมดสำหรับds9ในPATHตัวแปรสภาพแวดล้อมโดยดำเนินการคำสั่งต่อไปนี้:

type -a ds9

ตามคำถามที่อัปเดตของคุณจะเห็นได้อย่างชัดเจนจากผลลัพธ์ของtype -a ds9คำสั่งว่านามแฝงกำลังแชโดว์คำสั่งจริง

ในการดำเนินการคำสั่งจริงโดยการละเว้นนามแฝงและโดยไม่ระบุพา ธ แบบเต็มให้ใส่\อักขระ (แบ็กสแลช) ก่อนหน้าคำสั่ง สิ่งนี้จะข้ามนามแฝงที่กำหนดโดย bash ใด ๆ

หากคุณไม่ต้องการเพิ่มแบ็กสแลชก่อนคำสั่งทุกครั้งให้หาจุดที่สร้างชื่อแทนและลบออกหรือลบล้างนามแฝงด้วยคำสั่งจริง


1
ds9นิยามนามแฝงเป็นส่วนใหญ่อาจจะอยู่ใน~/.bashrcและควรจะออกมี (เพราะมันเป็นวิธีการที่ไม่ดีที่นำไปสู่ชนิดของปัญหานี้) grep ds9 ~/.bashrcจะยืนยัน
แดน

4

ฉันเห็นว่าสิ่งนี้ได้รับการแก้ไขสำหรับผู้ถาม แต่สำหรับผู้อ่านในอนาคตฉันต้องการพูดถึงว่าอาจเป็นกรณีที่คำสั่งถูกแฮชแล้วจึงลบไฟล์ (ดูhelp hashข้อมูล)

type -a commandnameจะไม่แสดงให้คุณเห็นเพียงtype commandnameจะ

ในกรณีนี้hash -d ds9จะเป็นทุกอย่างที่จำเป็น

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