Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

ปรับปรุง Bash History: เคล็ดลับปฏิบัติจริงสำหรับการติดตามคำสั่งที่ดีขึ้น

บทนำ

เทอร์มินัล Linux ที่รัน Bash มี history ในตัวที่คุณสามารถใช้ติดตามสิ่งที่คุณทำล่าสุด ในการดูประวัติ Bash session ใช้คำสั่ง built-in history:

$ echo "foo"
foo
$ echo "bar"
bar
$ history
1 echo "foo"
2 echo "bar"
3 history

คำสั่ง history ไม่ใช่ไฟล์ executable บน filesystem เหมือนคำสั่งส่วนใหญ่ แต่มันเป็นฟังก์ชันของ Bash คุณตรวจสอบได้ด้วยคำสั่ง type:

$ type history
history is a shell builtin

การควบคุม History

ขีดจำกัดบนสุดของบรรทัดใน shell history ถูกกำหนดโดยตัวแปร HISTSIZE คุณตั้งค่าตัวแปรนี้ในไฟล์ .bashrc ต่อไปนี้ตั้ง history ไว้ 3,000 บรรทัด หลังจากนั้นบรรทัดเก่าสุดจะถูกลบเพื่อให้ที่ว่างสำหรับคำสั่งใหม่ล่าสุดที่ด้านล่างของรายการ:

export HISTSIZE=3000

มีตัวแปรที่เกี่ยวกับ history อื่นๆ อีก ตัวแปร HISTCONTROL ควบคุมว่า history อะไรจะถูกเก็บ คุณสามารถบังคับให้ Bash ไม่รวมคำสั่งที่ขึ้นต้นด้วย space ว่าง โดยวางนี้ใน .bashrc:

export HISTCONTROL=$HISTCONTROL:ignorespace

ตอนนี้ หากคุณพิมพ์คำสั่งขึ้นต้นด้วย space คำสั่งนั้นจะไม่ถูกบันทึกใน history:

$ echo "hello"
$ mysql -u bogus -h badpassword123 mydatabase
$ echo "world"
$ history
1 echo "hello"
2 echo "world"
3 history

คุณสามารถหลีกเลี่ยงรายการซ้ำได้อีก:

export HISTCONTROL=$HISTCONTROL:ignoredups

ตอนนี้ หากคุณพิมพ์คำสั่งสองคำติดกัน จะมีแค่หนึ่งปรากฏใน history:

$ ls
$ ls
$ ls
$ history
1 ls
2 history

หากคุณชอบทั้งสองการละเว้นนี้ คุณสามารถใช้ ignoreboth ได้เลย:

export HISTCONTROL=$HISTCONTROL:ignoreboth

ลบคำสั่งออกจาก history

บางครั้งคุณทำผิดและพิมพ์ข้อมูลสำคัญลงใน shell หรืออาจแค่อยากทำความสะอาด history ให้แสดงขั้นตอนที่แท้จริงที่คุณทำเพื่อให้สิ่งต่างๆ ทำงานได้ถูกต้อง หากคุณต้องการลบคำสั่งจาก history ใน Bash ใช้ตัวเลือก -d พร้อมหมายเลขบรรทัดของไอเท็มที่ต้องการลบ:

$ echo "foo"
foo
$ echo "bar"
bar
$ history | tail
535 echo "foo"
536 echo "bar"
537 history | tail
$ history -d 536
$ history | tail
535 echo "foo"
536 history | tail
537 history -d 536
538 history | tail

เพื่อหยุดการเพิ่มรายการ history คุณสามารถวาง space ก่อนคำสั่ง ได้ตราบใดที่คุณมี ignorespace ในตัวแปรสภาพแวดล้อม HISTCONTROL:

$ history | tail
535 echo "foo"
536 echo "bar"
$ history -d 536
$ history | tail
535 echo "foo"

คุณสามารถล้างประวัติทั้ง session ด้วยตัวเลือก -c:

$ history -c
$ history
$

บทเรียนจาก History

การจัดการ history มักน่ากลัวน้อยกว่าที่ได้ยินมา โดยเฉพาะเมื่อคุณดูแลมันด้วยเจตนาที่ชัดเจน ตัวอย่างเช่น หากคุณกำลังจัดทำเอกสารปัญหาที่ซับซ้อน มักเป็นที่ดีที่สุดที่จะใช้ session history บันทึกคำสั่งของคุณ เพราะเมื่อคุณวางพวกมันใน history คุณก็กำลังรันพวกมันและทดสอบกระบวนการด้วย มักเกิดขึ้นว่าการจัดทำเอกสารโดยไม่ได้ทำจริงนำไปสู่การมองข้ามขั้นตอนเล็กๆ หรือเขียนรายละเอียดเล็กๆ ผิด

ใช้ history sessions ตามต้องการ และใช้ quyềnของคุณเหนือ history อย่างมีสติ ขอให้สนุกกับการแฮ็ก history!