Bash มีประวัติอันยาวนาน นั่นคือมันเป็นเชลล์เก่าที่มีบรรพบุรุษที่เก่ากว่า (เชลล์บอร์น) แต่ก็มี ประวัติ
ที่ยอดเยี่ยม คำสั่งที่มากกว่าอินเตอร์เฟสประวัติเชลล์อื่น ๆ ทั้งหมดตามจำนวนคุณสมบัติ ประวัติ
เวอร์ชัน Bash ช่วยให้สามารถค้นหาย้อนกลับ เรียกคืนอย่างรวดเร็ว ประวัติการเขียนใหม่ และอีกมากมาย
ประวัติ
คำสั่งไม่เหมือนกับคำสั่งอื่นๆ คุณอาจเคยชินกับคำสั่งที่เป็นไฟล์ปฏิบัติการที่วางอยู่ในตำแหน่งระดับระบบทั่วไป เช่น /usr/bin
, /usr/local/bin
, หรือ ~/bin
. ในตัว ประวัติ
คำสั่งไม่อยู่ใน PATH
. ของคุณ และไม่มีที่ตั้ง:
$ which history
which: no history in [PATH]
แทน ประวัติ
เป็นฟังก์ชันในตัวของเชลล์เอง:
$ type history
history is a shell builtin
$ help history
history: history [-c] [-d offset] [n] or
history -anrw [filename] or
history -ps arg [arg...]
Display or manipulate the history list.
[...]
ด้วยเหตุผลดังกล่าว ฟังก์ชันประวัติในแต่ละเชลล์จึงไม่ซ้ำกัน ดังนั้นสิ่งที่คุณใช้ใน Bash อาจไม่ทำงานใน Tcsh หรือ Fish หรือ Dash และสิ่งที่คุณใช้ใน Bash เหล่านั้นอาจไม่ทำงานใน Bash ในบางกรณี การรู้ว่า Bash ทำอะไรได้บ้างอาจเป็นแรงบันดาลใจให้ผู้ใช้เชลล์อื่นๆ สร้างแฮ็กที่น่าสนใจเพื่อโคลนพฤติกรรมของ Bash และอาจปลดล็อกฟีเจอร์ของ Bash ที่คุณไม่เคยรู้มาก่อน
ดูประวัติการทุบตีของคุณ
การใช้งาน history
ขั้นพื้นฐานและบ่อยครั้งที่สุด คำสั่งคือการดูประวัติของเชลล์เซสชันของคุณ:
$ echo "hello"
hello
$ echo "world"
world
$ history
1 echo "hello"
2 echo "world"
3 history
ตัวกำหนดกิจกรรม
ผู้กำหนดกิจกรรมจะค้นหาประวัติของคุณตามเหตุการณ์ เหตุการณ์ ในบริบทนี้คือคำสั่งที่บันทึกไว้ในประวัติของคุณ ซึ่งกำหนดโดยอักขระขึ้นบรรทัดใหม่ กล่าวคือ เป็นบรรทัดเดียว ทำเครื่องหมายด้วยหมายเลขดัชนีเพื่อใช้อ้างอิง
ผู้กำหนดกิจกรรมส่วนใหญ่เริ่มต้นด้วยเครื่องหมายอัศเจรีย์ ซึ่งบางครั้งเรียกว่า ปัง (<โค้ด>! )
หากต้องการเรียกใช้คำสั่งจากประวัติของคุณอีกครั้ง ให้ใช้เครื่องหมายอัศเจรีย์ตามด้วยหมายเลขดัชนีของคำสั่งที่คุณต้องการทันที (ไม่ต้องเว้นวรรค) ตัวอย่างเช่น สมมติว่าบรรทัดที่ 1 มีคำสั่ง echo "hello"
และคุณต้องการเรียกใช้อีกครั้ง:
$ !1
echo "hello"
hello
คุณสามารถใช้การวางตำแหน่งสัมพัทธ์โดยระบุจำนวนบรรทัดกลับจากตำแหน่งปัจจุบันของคุณในประวัติเป็นลบ ตัวอย่างเช่น หากต้องการย้อนกลับสามรายการในประวัติ:
$ echo "foo"
foo
$ echo "bar"
bar
$ echo "baz"
baz
$ !-3
echo "foo"
foo
หากคุณกำลังจะย้อนกลับไปหนึ่งบรรทัด คุณสามารถใช้ชวเลข !!
แทน !-1
. นั่นคือการประหยัดสำหรับการกดแป้นพิมพ์ทั้งหมด!
$ echo "foo"
$ !!
echo "foo"
foo
ค้นหาสตริง
คุณยังสามารถค้นหาสตริงเฉพาะผ่านรายการต่างๆ ได้ ในทางกลับกัน สำหรับคำสั่งที่จะรัน เพื่อค้นหาคำสั่ง เริ่มต้น ด้วยสตริงเฉพาะ ให้ใช้เครื่องหมายอัศเจรีย์ตามด้วยสตริงที่คุณต้องการค้นหาทันที (ไม่ต้องเว้นวรรค)
$ echo "foo"
$ true
$ false
$ !echo
echo "foo"
foo
คุณยังสามารถค้นหาคำสั่งที่มีสตริงในตำแหน่งใดก็ได้ (ไม่ใช่แค่ตอนเริ่มต้น) ในการทำเช่นนั้น ใช้ !
บวกสตริงที่คุณกำลังค้นหาตามปกติ แต่ล้อมรอบสตริงด้วยเครื่องหมายคำถามที่ปลายทั้งสองข้าง คุณอาจละเว้นเครื่องหมายคำถามต่อท้ายหากคุณรู้ว่าสตริงนั้นตามด้วยอักขระขึ้นบรรทัดใหม่ทันที (หมายความว่าเป็นสิ่งสุดท้ายที่คุณพิมพ์ก่อนที่คุณจะกด Return ):
$ echo "foo"
$ true
$ false
$ !?foo?
echo "foo"
foo
การแทนที่สตริง
คล้ายกับการค้นหาสตริงที่จุดเริ่มต้นของบรรทัด คุณสามารถค้นหาสตริงและแทนที่ด้วยสตริงใหม่ โดยเปลี่ยนคำสั่ง:
$ echo "hello"
hello
$ echo "world"
world
$ ^hello^foo
echo "foo"
foo
ทำให้ประวัติมีประโยชน์
ใน Bash คำสั่ง history มีความสามารถมากกว่าที่กล่าวถึงในที่นี้ แต่นี่เป็นการเริ่มต้นที่ดีในการทำความคุ้นเคยกับ การใช้ ประวัติของคุณแทนที่จะถือว่าเป็นข้อมูลอ้างอิง ใช้ ประวัติ
คำสั่งบ่อย ๆ และดูว่าคุณสามารถทำได้โดยไม่ต้องพิมพ์คำสั่ง คุณอาจประหลาดใจ!