ฉันสามารถค้นหาประวัติด้วยการทุบตีและเรียกใช้ผลลัพธ์ได้หรือไม่
ฉันสามารถค้นหาประวัติด้วยการทุบตีและเรียกใช้ผลลัพธ์ได้หรือไม่
คำตอบ:
พิมพ์Ctrl Rที่บรรทัดคำสั่งและเริ่มพิมพ์คำสั่งก่อนหน้า เมื่อผลปรากฏขึ้นให้กดปุ่มCtrl Rเพื่อดูการแข่งขันอื่น ๆ เมื่อคำสั่งที่คุณต้องการปรากฏขึ้นเพียงกดEnter
โปรดทราบว่า while Ctrl Rเป็นค่าเริ่มต้นหากคุณต้องการให้คำสั่ง ( reverse-search-history) ถูกผูกไว้กับCtrl Tคุณสามารถกำหนดค่าดังต่อไปนี้:
ผูก '"\ Ct": ย้อนกลับค้นหาประวัติ'
มีโฮสต์ทั้งหมดของคำสั่ง bindable readline อื่น ๆ ที่มีให้คุณเช่นกัน ลองดูที่เป็นหน้าคนbash
Bash มีสิ่งอำนวยความสะดวกมากมายในการค้นหาและเข้าถึงประวัติคำสั่งแบบโต้ตอบ พื้นฐานที่สุดซึ่งเป็นแบบhistoryบิลท์อิน พิมพ์เพียง:
$ ประวัติ
จะพิมพ์รายการคำสั่งพร้อมกับดัชนีตัวเลขเช่น:
$ ประวัติ 1 ที่ชัดเจน 2 ls -al 3 vim ~ / somefile.txt 4 ประวัติศาสตร์ $
จากนั้นคุณสามารถดำเนินการคำสั่งใด ๆ เหล่านี้โดยใช้ดัชนีตัวเลขของพวกเขาโดย prefacing ดัชนีที่มีเพียงหนึ่งเดียว!ตามที่มิทช์ชี้ให้เห็น:
$! 1
จะดำเนินการclearคำสั่ง ประวัติความเป็นมาในตัวมีคุณสมบัติมากมายคุณสามารถดูได้มากขึ้นในหน้าคนbashและhistory
คุณยังสามารถระบุการชดเชยเชิงลบแบบสัมพัทธ์เมื่อใช้ตัว!ออกแบบดังนั้นการใช้รายการประวัติของเราด้านบนหากเราต้องการดำเนินการvimอีกครั้งเราสามารถทำได้:
$! -2
ซึ่งโดยทั่วไปจะบอกว่าทุบตีเพื่อรันคำสั่งที่คุณรัน "สองคำสั่งก่อนหน้า" ในการรันคำสั่งก่อนหน้าในรายการประวัติเราสามารถใช้!!(ซึ่งเป็นเพียงการย่อ!-1)
ตัว!ออกแบบไม่ได้ จำกัด ให้คุณระบุตัวเลขคำสั่งที่จะเรียกใช้ hayalciแสดงให้เห็นว่าคุณสามารถสั่งbashให้รันคำสั่งตามข้อความที่เริ่มต้นด้วย (โดยใช้!) หรือข้อความภายในคำสั่งเอง (โดยใช้!?) อีกครั้งโดยใช้รายการประวัติตัวอย่างของเราด้านบนหากเราต้องการดำเนินการclearอีกครั้งสิ่งที่เราต้องทำคือพิมพ์:
$! cl
Enterและกด แล้วมันเกี่ยวกับvimอะไร? นั่นง่ายเหมือน:
บางส่วน
จุดที่สำคัญที่สุดจากhayalciการตอบสนองก็คือการเรียกไปshoptในตัว:
$ shopt -s histverify
นี้จะช่วยให้การตรวจสอบประวัติเพื่อให้คำสั่งที่ได้รับการจับคู่โดย!, !!และ!?designators ยังไม่ได้ดำเนินการสุ่มสี่สุ่มห้า แต่แทนที่จะเติมเต็มในในบรรทัดคำสั่งเพื่อให้คุณสามารถมั่นใจได้ว่าพวกเขาจะทำชั่วไม่มีพวกเขาก่อนที่จะดำเนิน สิ่งนี้สำคัญกว่าเมื่อคุณเรียกใช้คำสั่งในฐานะผู้ใช้รูท ตัวเลือกนี้สามารถตั้งค่าใน.bashrcไฟล์เริ่มต้นของคุณเพื่อให้มันถูกตั้งค่าเมื่อใดก็ตามที่คุณเข้าสู่ระบบ
ในฐานะที่ได้รับการชี้ให้เห็นข้อมูลทั้งหมดนี้สามารถรวบรวมได้จากหน้าคนbash สำหรับ!, !!, และ!? designators ให้ดูที่มาตราการขยายตัว 9.3 ประวัติความเป็นมา
shoptไปใน bashrc ไม่ใช่ bash_profile (มิเช่นนั้นจะไม่ถูกเปิดใช้งานสำหรับเชลล์ที่ไม่ใช่ล็อกอินเชลล์)
เป็นทางเลือกให้crtl+Rคุณสามารถค้นหาประวัติโดยการพิมพ์
!text
นี่จะค้นหาประวัติคำสั่งล่าสุดที่เริ่มต้นด้วย 'ข้อความ'
แต่ฉันขอแนะนำให้คุณใส่ใน. bashrc ของคุณเพื่อป้องกันการดำเนินการคำสั่งที่ไม่ถูกต้อง
shopt -s histverify
สิ่งนี้สั่งให้ทุบตีดังกล่าวซึ่งหลังจากการกระทำประวัติใด ๆ (เช่น!!:s/prev_text/after_text) มันจะวางบรรทัดผลลัพธ์ไปยังพรอมต์คำสั่ง จากนั้นคุณสามารถตรวจสอบหรือแก้ไขคำสั่งแล้วกด Enter หลังจากนั้น
คุณสามารถทำได้:
history | grep "stuff"
มันจะกลับมาเหมือน
num stuff
จากนั้นคุณสามารถพิมพ์
!num
ฉันชอบที่จะใช้ history-search-backward มากกว่า reverse-search-history ตัวก่อนหน้าให้คุณพิมพ์อักขระสองสามตัวของคำสั่งจากนั้นกดปุ่มค้นหาซึ่งต่างกับการกดปุ่มค้นหาก่อนจากนั้นจึงพิมพ์สตริงการค้นหา
ตามค่าเริ่มต้นในระบบของฉัน, Mp และ Mn ผูกกับฟังก์ชั่นที่คล้ายกัน แต่ฉันชอบที่จะผูกปุ่มลูกศร:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
ฉันมีนามแฝงที่ยอดเยี่ยมจริงๆ มันเป็นเพียงแค่ "history | grep" แต่ฉันกรองรายการ "คำสั่ง h" ก่อนหน้าด้วย "grep -E -v"
alias h="history | grep -E -v '^ *[0-9]+ *h ' | grep "
ใช้เหมือน
h aliases
2003 less .bash_aliases
HISTIGNOREนอกจากนี้ยังสามารถทำได้โดยการเพิ่มคำสั่งไปยัง
เขียนดีฌอน! ฉันต้องการแสดงความคิดเห็น แต่ฉันมีชื่อเสียงไม่กี่คะแนนที่ขี้อาย :-)
เทคนิคที่เกี่ยวข้องและมีประโยชน์อีกประการหนึ่งคือความสามารถในการเรียกใช้คำสั่งก่อนหน้าขณะที่เปลี่ยนคำ สมมติว่าคุณพิมพ์ชื่อไดเรกทอรีหรือต้องการเปลี่ยนชื่อไฟล์:
$ echo ฉันชื่อบ๊อบ ฉันชื่อบ๊อบ $ ^ bob ^ jordan สะท้อนชื่อของฉันคือจอร์แดน ฉันชื่อจอร์แดน
โปรดสังเกตว่าคำสั่งถูกขยายแทนที่และเอาท์พุทก่อนที่คำสั่งจะถูกเรียกใช้ดังนั้นหากคำสั่งที่ไม่ถูกต้องถูกเรียกใช้คุณจะเห็นว่า bash คิดว่ามันกำลังทำอะไรอยู่
เนื่องจากการนำทางผ่านประวัติโดยใช้ Ctrl-r นั้นยุ่งยาก IMO คุณอาจต้องพิจารณาhh :
https://github.com/dvorka/hstr
ซึ่งทำให้การนำทางง่ายขึ้นตรงไปตรงมาและมีประสิทธิภาพมาก - รวมถึงการรันคำสั่ง:

ctrl + rตอนนี้มันจะผูกกับค่าเริ่มต้น
ที่พรอมต์คำสั่ง bash ให้พิมพ์ control-R จากนั้นพิมพ์อักขระสองสามตัวของคำสั่งที่คุณต้องการและเครื่องมืออำนวยความสะดวก readline ของ bash จะค้นหาประวัติคำสั่งสำหรับคำสั่งนั้น
หลังจากคุณเริ่มการค้นหาคุณสามารถพิมพ์ control-R อีกครั้งเพื่อข้ามไปยังคำสั่งที่ตรงกันถัดไป
หากคุณมีเปลือกของคุณกำหนดค่าให้ใช้viปุ่มลัด ( set -o viหรือมีset editing-mode viใน$HOME/.inputrc) แล้วคุณค้นหาด้วย<Esc>/some-command<Return>และกดn(ถัดไป) หรือShift-n(ก่อนหน้า) เพื่อวงจรผ่านประวัติศาสตร์บรรทัดคำสั่ง
CTRL+ ใช้Rงานได้ดีอย่างที่แนะนำ @ John1024 แต่ค่อนข้างน่าเบื่อถ้าคำสั่งล่าสุดหลายคำของคุณเหมือนกันและคุณต้องการวิธีที่รวดเร็วในการสแกนพวกเขาทั้งหมด ทางเลือกอื่นคือใช้history:
$ history | grep keyword
ฉันชอบ HSTR แต่ฉันไม่สามารถติดตั้งได้ในบางครั้ง ดังนั้นฉันจึงเขียนนามแฝงโดยใช้fzfซึ่งเลียนแบบพฤติกรรมของมัน ( hxสำหรับ "ดำเนินการประวัติ")
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history : ดีรับประวัติศาสตร์sed : ลบคอลัมน์หมายเลขออกจากรายการ (POSIX)fzfนี่คือความมหัศจรรย์ที่ช่วยให้คุณสามารถเลือนค้นหารายการโต้ตอบหรือย้ายไปอยู่กับC-Jและแล้วรันคำสั่งด้วยC-KEnter--height : ตั้งค่าจำนวนบรรทัดที่แสดง--tac : ย้อนกลับรายการ (ตรรกะมากขึ้นสำหรับประวัติ)--tiebreak=index : เก็บลำดับประวัติเมื่อ fzf อัปเดตผลลัพธ์