Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

วิธีใช้คำสั่งประวัติทุบตี

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 มีความสามารถมากกว่าที่กล่าวถึงในที่นี้ แต่นี่เป็นการเริ่มต้นที่ดีในการทำความคุ้นเคยกับ การใช้ ประวัติของคุณแทนที่จะถือว่าเป็นข้อมูลอ้างอิง ใช้ ประวัติ คำสั่งบ่อย ๆ และดูว่าคุณสามารถทำได้โดยไม่ต้องพิมพ์คำสั่ง คุณอาจประหลาดใจ!