เลือกคำสั่งจากประวัติทุบตี


20

การกดปุ่ม up น่าเบื่อและอาจพลาดคำสั่งที่ต้องการ ดังนั้นเมื่อพิมพ์historyที่เทอร์มินัลให้คำสั่งทั้งหมดที่ฉันป้อนไว้ก่อนหน้านี้ให้ทำดัชนีกับตัวเลข มีวิธีใดบ้างที่ฉันจะสามารถโทรหาหมายเลขที่เกี่ยวข้องกับคำสั่งได้?


ตัวเลือกแบบโต้ตอบได้อีกหรือไม่ สิ่งเหล่านี้เป็นข้อผิดพลาดได้ง่าย
แมตต์

คำตอบ:


31

ประวัติทุบตีสามารถทำสิ่งที่เป็นประโยชน์มากมายและการค้นหาด้วยStrg-rเทอร์รี่วังกล่าวถึงเป็นสิ่งสำคัญในหมู่พวกเขา แต่ก็เป็นไปได้ที่จะทำสิ่งที่คุณขอ

!!คุณสามารถทำคำสั่งก่อนหน้านี้มี ด้วยสิ่งนี้คุณยังสามารถแก้ไขคำสั่งก่อนหน้า ตัวอย่างเช่นคุณลืมที่จะรับสิทธิ์พิเศษสำหรับคำสั่ง

apt-get install a-long-list-of-packages

คุณไม่ต้องพิมพ์ซ้ำทั้งหมดอีกครั้ง แทนที่จะโทรมา

sudo !!

หากคุณต้องการรันคำสั่งอีกครั้งที่ตำแหน่งเฉพาะจากประวัติของคุณคุณสามารถใช้!ตัวอย่างเช่น

!3

เพื่อเรียกใช้งานคำสั่งอีกครั้งที่ตำแหน่ง 3 โปรดทราบว่าสิ่งนี้นับจากด้านบน ดังนั้นหากคุณเก็บคำสั่ง 500 คำสั่งในประวัติของคุณ!1จะเป็น "คำสั่ง 500 คำสั่งที่ผ่านมา" คุณสามารถใช้ตัวเลขติดลบได้ ตัวอย่างเช่น

!-2

จะเรียกใช้คำสั่งสุดท้ายชุดที่สองอีกครั้ง

คุณยังสามารถเรียกใช้คำสั่งล่าสุดอีกครั้งที่เริ่มต้นด้วยสตริงเช่น

!apt-

ซึ่งจะทำบรรทัดสุดท้ายที่เริ่มต้นด้วย "apt-" อีกครั้ง หากคุณต้องการคำสั่งสุดท้ายที่สตริงปรากฏที่ใดก็ได้ในบรรทัดคุณสามารถใช้สิ่งที่ต้องการ

!?pt-ge

มีสิ่งที่น่าสนใจมากกว่าที่ประวัติศาสตร์ทุบตีสามารถทำได้ เพียงแสดงความเป็นไปได้ที่หลากหลายคุณสามารถเข้าถึงพารามิเตอร์ของคำสั่งจากประวัติ ดังนั้น

!-5:3:p

จะพิมพ์พารามิเตอร์ที่สามไปยังที่ห้าจากคำสั่งสุดท้าย

แก้ไข: เกี่ยวกับความคิดเห็นของ Rudie ด้านล่างด้วยการตั้งค่ามาตรฐานการขยายประวัติทุบตีนี้จะดำเนินการโดยตรงแน่นอน มันอาจจะอธิบายได้ดีที่สุดเช่นนี้การเรียกเช่น!-3นั้นถูกแทนที่ด้วยเชลล์ด้วยคำสั่งสุดท้ายลำดับที่สามจากประวัติของคุณจากนั้นดำเนินการอินพุตของคุณ (พร้อมการแทนที่) ดังนั้นหากคุณพิมพ์!-3และกดENTERและคำสั่งสุดท้ายที่สามคือls ~มันจะมีผลเหมือนกับที่คุณพิมพ์ls ~อีกครั้งและกดENTER"ด้วยตัวคุณเอง"

หากคุณไม่ต้องการสิ่งนั้นคุณสามารถตั้งค่าตัวเลือกเชลล์histverifyได้ สำหรับการตั้งค่าและการยกเลิกการตั้งค่าตัวเลือกเชลล์คุณอาจต้องการอ่านshoptคำสั่ง ด้วยhistverifyset การโทรอย่าง!-3เดียวจะเขียนการแทนที่จากประวัติของคุณไปยังบรรทัดคำสั่งของคุณ แต่ไม่ดำเนินการโดยตรง คุณต้องรีบกดสิ่งที่สำคัญออกไปENTERหรืองดเว้นหากคุณเลือก


ดังนั้น!สวยอันตรายแช่ง ... ฉันต้องการที่จะรู้ว่าสิ่งที่!-4ไม่ตรงก่อนที่จะใช้มัน หรือมันจะแสดงให้คุณก่อน? สรุปเด็ด!
Rudie

1
@Rudie นั่นเป็นจุดที่ดีฉันได้ปรับปรุงคำตอบของฉัน คุณลักษณะประวัติส่วนใหญ่มีไว้เพื่อเพิ่มความเร็วในการทำงานของคุณและช่วยให้คุณประหยัดการกดแป้นพิมพ์ ดังนั้นมาตรฐาน "คุณจริงๆหมายความว่าจริงเหรอ?" อย่างน้อยก็จะเอาชนะวัตถุประสงค์นั้นได้บางส่วน และแม้ว่าคุณจะทำได้ตามปกติคุณจะไม่เรียกคำสั่ง "ไกลกลับ" !-238ชอบ ไม่ควรยากเกินไปที่จะจดจำคำสั่งสุดท้ายที่สองที่สามที่ผ่านมาอาจจะเป็นคำสั่งสุดท้ายที่คุณมักจะใช้กับ Linux (และที่จริงแล้วด้วยการคำนวณทั่วไป) คาดว่าคุณรู้ว่าคุณกำลังทำอะไรอยู่ และถ้าคุณต้องการเครือข่ายความปลอดภัยเพิ่มเติมจริง ๆ มันก็shoptอยู่ห่างออกไปหนึ่งเดียว)
Henning Kockerbeck

16

ใช่แล้ว ตัวอย่างเช่นหากคุณต้องการรันคำสั่งที่มีหมายเลข 1234 อยู่ข้างๆให้ทำ:

!1234

สิ่งที่มีประโยชน์อื่น ๆ :

  • หากคุณต้องการรันคำสั่งสุดท้ายที่คุณรันให้ทำ:

    !!
  • หากคุณต้องการรันlsคำสั่งสุดท้ายที่คุณรันให้ทำ:

    !ls
  • หากคุณเพิ่งวิ่งls /some/long/pathและคุณต้องการที่cdจะทำ:

    cd !$

สำหรับข้อมูลเพิ่มเติม:



3

หากคุณพบว่าจำนวนประวัติศาสตร์ของคำสั่งและคุณต้องการที่จะดำเนินการได้อีกครั้งประเภท!ตามด้วยหมายเลขเช่นและกด!1234 Enterนี้เป็นส่วนหนึ่งของการขยายตัวของประวัติศาสตร์ ; คุณสามารถตะปูตัวดัดแปลงลงบนมันได้

หากคุณต้องการแก้ไขคำสั่งก่อนเรียกใช้งานให้fc 1234เรียกใช้ตัวแก้ไขภายนอก

แต่ดังที่ Terry Wang กล่าวถึงแล้วมักจะมีวิธีการค้นหาคำสั่งในประวัติศาสตร์ได้เร็วกว่าการระบุหมายเลขประวัติรวมถึงCtrl+ Rเพื่อเรียกใช้การค้นหาแบบเพิ่มเติม (กดEnterเมื่อคุณพบคำสั่งที่คุณต้องการเรียกใช้) หรือfc PREFIXดำเนินการก่อนหน้า PREFIXคำสั่งเริ่มต้นด้วย


1

historyคำสั่งจะแสดงคำสั่งทั้งหมดและตัวเลขที่เกี่ยวข้อง หากคุณต้องการตรวจสอบอย่างรวดเร็วก่อนดำเนินการบรรทัดคำสั่ง # 135 คุณสามารถพิมพ์:

echo !135

สิ่งนี้จะแสดงให้คุณเห็นว่าจะมีการดำเนินการอย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.