คุณสามารถสร้าง "นามแฝง" ใน Bash ได้หลายวิธี


10

ฉันเพียงรู้ของสองวิธีและalias foo=barfunction foo() { bar }

เหตุผลที่ฉันถามคือ - ทั้งหมดในเซสชัน bash ของฉัน - ฉันไม่สามารถเรียกใช้lnคำสั่งได้เนื่องจากbashมีข้อผิดพลาด-bash: /usr/local/.../ln: No such file or directory(ซึ่ง/usr/local/.../เป็นหนึ่งในรายการในPATHตัวแปรสภาพแวดล้อมของฉัน)

มันไม่ใช่PATHปัญหาเพราะถ้าฉันเรียกใช้which lnมันจะเอาท์พุทไบนารีที่คาดหวังของ/usr/bin/ln(ซึ่งฉันสามารถทำงานได้ดีถ้าฉันระบุเส้นทางที่แน่นอน)

ฉันยังตรวจสอบlnในของฉันaliasและfunctionประกาศและไม่มีอะไร:

$ declare -f | grep ln
$ alias | grep ln

ปัญหากำลังเกิดขึ้นในเซสชัน bash เดียว ถ้าฉันเริ่มเชลล์ใหม่มันจะทำงานได้ดีอีกครั้ง แต่ฉันอยากรู้ว่าอะไรทำให้เกิดปัญหานี้ในทันทีในเซสชั่นของการทุบตีนี้

ความคิดใด ๆ เกี่ยวกับสิ่งที่อาจทำให้เกิดสิ่งนี้

คำตอบ:


10

ระวังเมื่อใช้whichคำสั่ง ดีกว่าที่จะใช้type ...คำสั่ง

$ type ln
ln is /bin/ln

คุณยังสามารถใช้whereisคำสั่ง:

$ whereis ln
ln: /bin/ln /usr/share/man/man1p/ln.1p.gz /usr/share/man/man1/ln.1.gz

คุณถูก! เมื่อฉันเรียกใช้type lnฉันได้รับln is hashed (/usr/local/.../ln)ซึ่งดูเหมือนจะเป็นปัญหา แต่มันหมายความว่าอะไร "hashed"? ฉันไม่เคยได้ยินเกี่ยวกับคุณสมบัตินั้นในการทุบตี
etherice

3
@etherice - Bash รักษาแฮช (รายการ key = value) ของชื่อคำสั่งและที่ตั้งของมัน คุณสามารถดูรายการด้วยhash -lคำสั่ง มันสร้างขึ้นแบบไดนามิกเมื่อคุณใช้คำสั่ง
slm

@etherice - ฉันเพิ่งอัปเดตคำถามของคุณเพื่อให้คุณมีเพียง 4 pts ออกไป 8-) คุณสามารถยอมรับคำตอบเมื่อปัญหาของคุณได้รับการแก้ไขและคุณรู้สึกว่ามันเป็นคำตอบที่ดีที่สุด
slm

@etherice - มีคนอื่นเพิ่งโหวตคุณดังนั้นตอนนี้คุณมี 16 แต้ม
slm

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