หลีกเลี่ยงการสั่งการในประวัติศาสตร์


33

ฉันใช้ bash และฉันต้องการหลีกเลี่ยงคำสั่งบางอย่างที่ถูกเก็บไว้ในประวัติศาสตร์

  • เป็นไปได้ไหมที่จะทำเช่นนั้นสำหรับคำสั่งถัดไปเท่านั้น?
  • เป็นไปได้ไหมที่จะทำเช่นนั้นตลอดทั้งเซสชัน?

โปรดทราบว่าหากเป้าหมายคือการซ่อนรหัสผ่านในอาร์กิวเมนต์บรรทัดคำสั่งพวกเขาจะยังคงมองเห็นได้ผ่านทาง ps
Benitok

คำตอบ:


36

และฉันเพิ่งจำคำตอบอื่นได้คำตอบนี้เป็นคำตอบที่แท้จริงสำหรับคำถามของคุณ

ถ้าคุณมี "ignorespace" ใน HISTCONTROL แล้ว bash จะไม่จดจำบรรทัดใด ๆ ที่ขึ้นต้นด้วยอักขระเว้นวรรค มันจะไม่ปรากฏแม้ในประวัติของเชลล์ปัจจุบันให้บันทึกเพียงอย่างเดียวใน $ HISTFILE

เช่นฉันได้ส่งออก HISTCONTROL = 'ignboth: erasedups'ใน ~ / .bashrc ของฉัน

นี่คือรายละเอียดจากหน้าคนทุบตี:

HISTCONTROL
  รายการค่าคั่นด้วยโคลอนที่ควบคุมวิธีการใช้คำสั่ง
  บันทึกไว้ในรายการประวัติ หากรายการของค่ารวมถึง
  บรรทัดที่เริ่มต้นด้วยอักขระช่องว่างนั้นไม่ใช่
  บันทึกไว้ในรายการประวัติ ค่าของการเพิกเฉยทำให้เกิดบรรทัด
  ตรงกับรายการประวัติก่อนหน้านี้ที่จะไม่ถูกบันทึก ค่าของ
  ignboth เป็นชวเลขสำหรับการเพิกเฉยและการเพิกเฉย ค่า
  ของการลบทำให้เกิดบรรทัดก่อนหน้าทั้งหมดที่ตรงกับบรรทัดปัจจุบัน
  ที่จะลบออกจากรายการประวัติก่อนที่จะบันทึกบรรทัดนั้น
  ค่าใด ๆ ที่ไม่อยู่ในรายการด้านบนจะถูกละเว้น ถ้า HISTCONTROL เป็น
  unset หรือไม่มีค่าที่ถูกต้องทุกบรรทัดที่อ่านโดย
  ตัวแยกวิเคราะห์เชลล์จะถูกบันทึกในรายการประวัติภายใต้ค่า
  ของ HISTIGNORE บรรทัดที่สองและต่อมาของหลายบรรทัด
  คำสั่งผสมจะไม่ถูกทดสอบและถูกเพิ่มเข้าไปในประวัติ
  โดยไม่คำนึงถึงมูลค่าของ HISTCONTROL

1
+1 สำหรับเคล็ดลับพื้นที่: D
petrus

19

นี่คือบทเรียนประวัติศาสตร์เล็กน้อยที่ฉันเรียนรู้จาก googling:

คุณสามารถตั้งค่าประวัติให้ละเว้นสตริงที่แน่นอนได้ ในตัวอย่างนี้ฉันไม่สนใจคำสั่ง ls, passwd และคำสั่งใด ๆ นำหน้าด้วยช่องว่างอักขระ

ส่งออก HISTIGNORE = "ls: passwd:"

หากต้องการปิดใช้งานประวัติสำหรับเซสชันของคุณคุณสามารถออก:

ส่งออก HISTSIZE = 0

การอ้างอิง


7

หากคุณต้องการลบคำสั่งสุดท้ายออกจากประวัติคุณสามารถกดUp-arrowตามด้วยCtrl - U(ลบถึงจุดเริ่มต้นบรรทัด) จากนั้นUp-arrowอีกครั้ง

คุณสามารถลบบรรทัดใด ๆ จากประวัติเช่นนี้ เพียงใช้ลูกศรชี้ขึ้นหรือค้นหาหรืออะไรก็ตามที่ทำให้บรรทัดคำสั่งปัจจุบันถูกแก้ไขจากนั้นกดCtrl - Uและจากนั้นUp-arrowหรือDown-arrowเพื่อย้ายไปยังบรรทัดประวัติอื่น

ฉันค้นพบสิ่งนี้โดยบังเอิญเมื่อวันที่ผ่านมาหลายปี ฉันไม่รู้ว่ามันเป็นเอกสารหรือไม่

โดยทั่วไปแล้วมันเป็นเรื่องยุ่งยากน้อยกว่าที่จะไม่บันทึกประวัติของเชลล์ปัจจุบันด้วย:

HISTFILE=/dev/null

3

คุณสามารถยกเลิกการตั้งค่าHISTFILEตัวแปร จากman bash:

  HISTFILE
         ชื่อของไฟล์ที่บันทึกคำสั่งประวัติ (ดู HIS-
         TORY ด้านล่าง) ค่าเริ่มต้นคือ ~ / .bash_history หากไม่มีการตั้งค่า
         ประวัติคำสั่งจะไม่ถูกบันทึกเมื่อเชลล์แบบโต้ตอบ
         ทางออก

ฉันไม่คิดว่าสิ่งนี้จะป้องกันไม่ให้คำสั่งปรากฏในประวัติเชลล์ท้องถิ่นก่อนที่เชลล์จะออก



1

ฉันเห็นว่าไม่มีใครเขียนวิธีนี้ดังนั้นฉันจะ

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d ลบรายการที่กล่าวถึงจากประวัติ

HISTCMDเก็บ command_number ของคำสั่งที่จะดำเนินการต่อไป ดังนั้น (HISTCMD-1) หมายถึงคำสั่งที่ดำเนินการครั้งสุดท้าย

ฉันทำหนังทุบตีสั้น ๆ ซึ่งแสดงวิธีการทำงาน: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2

หลังจากรันคำสั่งและเนื่องจากมันลบคำสั่งด้วยตัวเองดังนั้นการขึ้นไปด้วยลูกศรจะไม่แสดงคำสั่งดังนั้นหากคุณวางแผนที่จะใช้บ่อยๆมันจะเป็นการดีที่สุดที่จะสร้างนามแฝง:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

จากนั้นคุณสามารถทำได้:

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