Friday, August 12, 2005

Bash History

เมื่อก่อนสมัยยังไม่มี bash ก็มักจะใช้ set -o vi
เพื่อให้ใช้ vi command ในการ access history command ได้

ปัจจุบัน มี bash ก็ไม่ค่อยได้ set -o vi แล้ว (จริงๆแล้วไม่ค่อยได้ใช้ shell เท่าไรแล้วด้วย)
ใช้แต่ลูกศรขึ้นลง scroll ไปมา
พึ่งมารู้วันนี้เองว่า history ของ bash ทำอะไรได้เยอะเหมือนกัน

เริ่มด้วย สมมติว่าเราพึ่งสั่ง ls -l | head ไป
และต้องการสั่งซ้ำอีก แทนที่จะใช้ลูกศรขึ้นไปหา
เราสามารถใช้คำสั่ง !l แทนได้ โดยมันจะหาคำสั่งล่าสุดที่ขึ้นต้นด้วยตัว l ให้เอง

หรือถ้าใช้ !?head แทนก็ได้ โดยมันจะหาคำสั่งล่าสุด
ที่มีคำว่า head

ส่วนการ search ก็สามารถใช้ ^r เพื่อเข้าสุ่ reverse incremental history search mode
เมื่อหา command ที่ต้องการเจอแล้ว ก็สั่งทำงานด้วยการ enter
หรือจะสัง ^j เพื่อ edit command ก่อน (กรณียกเลิกค้นหาใช้ ^c)

ถ้าสั่ง ^head^tail ก็เป็นการเรียกใช้ command ก่อนหน้า แต่
แทนที่คำว่า head ด้วยคำว่า tail

สั่ง history | grep -i 'head' เพื่อ list คำสั่ง
ที่มีคำว่า head จากนั้นก็ใช้ !linenumber เพื่อเลือกคำสั่งที่ต้องการ

ถ้าเราดูใน history จะเห็นว่ามันมีคำสั่งพื้นๆ เช่น ls, edit อยู่เต็มไปหมด
กรณีที่เราไม่ต้องการเก็บคำสั่งเหล่านี้ใน history ก็ใช้
export HISTIGNORE="&:ls:[bf]g:exit"
มี trick หนึ่งก็คือ ถ้าเราใช้ [ \t]* ใน HISTIGNORE
กรณีที่เราสั่งคำสั่งที่ไม่ต้องการให้เก็บใน history
ก็เพียงแต่เติม space ไปข้างหน้าคำสั่ง

Related link from Roti

No comments: