hash
เป็นคำสั่งในตัวของ bash ตารางแฮชเป็นคุณสมบัติbash
ที่ป้องกันไม่ให้ค้นหา$PATH
ทุกครั้งที่คุณพิมพ์คำสั่งโดยการแคชผลลัพธ์ในหน่วยความจำ ตารางจะถูกล้างข้อมูลในเหตุการณ์ที่ทำให้ผลลัพธ์ชัดเจน (เช่นการแก้ไข$PATH
)
hash
คำสั่งเป็นเพียงวิธีการที่คุณโต้ตอบกับระบบที่ (ด้วยเหตุผลใดก็ตามที่คุณรู้สึกว่าคุณต้อง)
บางกรณีใช้:
ตัวอย่าง:
[root@policyServer ~]# hash -p /lol-wut/whoami whoami
[root@policyServer ~]# whoami
Not what you're thinking
[root@policyServer ~]# which whoami
/usr/bin/whoami
[root@policyServer ~]# /usr/bin/whoami
root
[root@policyServer ~]#
ซึ่งอาจมีประโยชน์หากคุณมีไฟล์สั่งการเพียงไฟล์เดียวในไดเรกทอรี$PATH
ที่คุณต้องการเรียกใช้โดยพิมพ์ชื่อแทนการรวมทุกอย่างในไดเรกทอรีนั้น (ซึ่งจะมีผลหากคุณเพิ่มไป$PATH
)
นามแฝงมักจะทำสิ่งนี้ได้เช่นกันแม้ว่าคุณจะแก้ไขพฤติกรรมของเชลล์ปัจจุบัน แต่ก็ไม่ได้ถูกแมปในโปรแกรมที่คุณเริ่มต้น symlink ไปที่ lone executable อาจเป็นตัวเลือกที่ดีกว่าที่นี่ hash
เป็นวิธีหนึ่งในการทำมัน
- คุณสามารถใช้มันเพื่อยกเลิกการจำเส้นทางไฟล์ สิ่งนี้มีประโยชน์หากไฟล์ปฏิบัติการใหม่ปรากฏขึ้นใน
PATH
ไดเรกทอรีก่อนหน้าหรือmv
ไปที่อื่นและคุณต้องการบังคับให้ bash ออกไปและค้นหามันอีกครั้งแทนที่จะเป็นที่สุดท้ายที่จำได้
ตัวอย่าง:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# cp /bin/ls /lol-wut
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /bin/ls
[root@policyServer ~]# hash -d ls
[root@policyServer ~]# ls
default.ldif newDIT.ldif notes.txt users.ldif
[root@policyServer ~]# hash
hits command
1 /bin/cp
1 /lol-wut/ls
[root@policyServer ~]#
cp
คำสั่งที่เกิดจากการรุ่นใหม่ของls
ปฏิบัติการที่จะแสดงขึ้นก่อนหน้านี้ในของฉัน$PATH
แต่ไม่ได้ก่อให้เกิดการล้างของตารางแฮช ฉันใช้hash -d
เพื่อล้างรายการls
จากตารางแฮช ทุบตีถูกบังคับให้ต้องมองผ่าน$PATH
อีกครั้งและเมื่อมันทำมันก็พบว่ามันอยู่ในตำแหน่งที่ใหม่กว่า (ก่อนหน้านี้ใน $ PATH กว่ามันทำงานมาก่อน)
คุณสามารถเลือกเรียกใช้$PATH
พฤติกรรม"ค้นหาตำแหน่งใหม่ของการปฏิบัติการได้จาก" แม้ว่า:
[root@policyServer ~]# hash
hits command
1 /bin/ls
[root@policyServer ~]# hash ls
[root@policyServer ~]# hash
hits command
0 /lol-wut/ls
[root@policyServer ~]#
คุณต้องการทำสิ่งนี้เป็นส่วนใหญ่หากคุณต้องการบางสิ่งบางอย่างจากตารางแฮชและไม่ใช่ 100% ที่คุณสามารถออกจากระบบแล้วกลับมาใหม่ได้สำเร็จหรือคุณต้องการรักษาการปรับเปลี่ยนบางอย่างที่คุณทำกับเปลือกของคุณ
เพื่อกำจัดการแมปค้างคุณยังสามารถทำhash -r
(หรือexport PATH=$PATH
) ซึ่งมีประสิทธิภาพเพียงกำจัดตารางแฮชทั้งหมดของ bash
มีสถานการณ์เล็ก ๆ น้อย ๆ มากมายเช่นนั้น ฉันไม่รู้ว่าฉันจะเรียกมันว่าหนึ่งในคำสั่ง "มีประโยชน์มากที่สุด" แต่มันมีบางกรณีใช้