ฉันจะปิดเทอร์มินัลโดยไม่บันทึกประวัติได้อย่างไร


33

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

คำตอบ:


25

ประวัติเชลล์ของคุณถูกบันทึกในไฟล์ที่ระบุโดยHISTFILEตัวแปร ดังนั้น:

unset HISTFILE

สิ่งนี้ยังใช้กับ zsh แต่ไม่ใช่กับ ksh ที่จะบันทึกไฟล์ที่ระบุโดย$HISTFILEเมื่อเชลล์เริ่มทำงาน (และตรงกันข้ามคุณตัดสินใจบันทึกประวัติเป็น ksh เมื่อคุณเริ่มเชลล์)


ฉันสามารถใช้สิ่งนี้ก่อนที่ฉันจะออกจากระบบหลังจากที่ฉันเสียประวัติ? และมันจะเป็นอย่างไรสำหรับเซสชั่นนี้? ฉันไม่ต้องการset HISTFILEครั้งต่อไปที่ฉันเข้าสู่ระบบ? (เพียงแค่บอกว่าสิ่งนี้ถูกต้องหรือไม่ถูกต้อง)

@ acidzombie24 ถูกต้องการเปลี่ยนแปลงตัวแปรสภาพแวดล้อมจะไม่ถูกบันทึกข้ามเซสชันยกเว้นว่าคุณเก็บการเปลี่ยนแปลงไว้อย่างชัดเจนเช่นในไฟล์ rc
jw013

31

คำตอบสั้น ๆ :

พิมพ์สิ่งนี้ที่พรอมต์:

$ kill -9 $$

สิ่งนี้จะฆ่าเชลล์ของคุณทันทีโดยที่เชลล์ไม่สามารถทำอะไรเช่นดักสัญญาณบันทึกประวัติเรียกใช้~/.bash_logoutงานเตือนเกี่ยวกับงานที่หยุดหรือสิ่งดีๆอื่น ๆ

คำตอบยาว:

หมายเหตุ: ตัวเลือกเหล่านี้ไม่ได้เกิดขึ้นพร้อมกัน พวกเขาสามารถใช้ทั้งหมดในครั้งเดียว

ตัวเลือกที่ 1:

หากคุณเป็นคนชอบความสมบูรณ์แบบเมื่อพูดถึงการทำให้แฟ้มประวัติของคุณยุ่งเหยิงสิ่งที่คุณสามารถทำได้คือปรับเปลี่ยนHISTIGNOREตัวแปรเพื่อรวมคำสั่งที่คุณไม่ต้องการบันทึกไว้ ตัวอย่างเช่นหากคุณเพิ่มลงHISTIGNORE='ls*:cd*'ใน~/.bashrcอินสแตนซ์ของคุณlsและcdจะไม่ถูกแทรกลงในไฟล์ประวัติของคุณ

ตัวเลือก 2:

หากคุณต้องการควบคุมแบบ command-by-command สิ่งที่คำสั่งออกจากประวัติของคุณคุณสามารถตั้งค่าHISTCONTROL='ignorespace'ซึ่งจะละเว้นบรรทัดคำสั่งใด ๆ ที่ขึ้นต้นด้วยช่องว่าง การใช้ignorebothจะละเว้นบรรทัดที่ซ้ำกัน จากนั้นการกดปุ่ม space bar ก่อนที่คุณจะป้อนคำสั่งจะทำให้คำสั่งนั้นไม่ปรากฏในไฟล์ประวัติของคุณ

ตัวเลือก 3:

หากคุณต้องการให้มันเป็นอย่างนั้นเมื่อคุณปิดเทอร์มินัลเชลล์ออกทันทีคุณสามารถtrapส่งสัญญาณว่าโปรแกรมเทอร์มินัลส่งเชลล์ ( xtermเช่นส่งSIGHUPแล้วรอให้เชลล์ออกจาก) และออกโดยไม่บันทึกประวัติเมื่อมัน รับสัญญาณนี้ เพิ่มลงในของคุณ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

2
+1 สำหรับวิธีการ 'ฆ่า -9 $$' นั่นเป็นวิธีหนึ่งในสถานการณ์ที่ HISTIGNORE ฯลฯ ถูกกำหนดให้เป็นแบบอ่านอย่างเดียว
Corey Henderson

7
ฉันไม่คิดว่าเป็นความคิดที่ดีที่จะส่งเสริมการใช้kill -9เพื่อสิ่งใดยกเว้นสถานการณ์ที่เลวร้ายเมื่อทุกอย่างล้มเหลว
Christoffer Hammarström

1
การส่ง SIGKILL นั้นไม่ได้เป็นความคิดที่ดีเหมือนขั้นตอนการปฏิบัติการมาตรฐาน ใช้ขั้นตอนที่เหมาะสมเช่นการตั้งค่า HISTFILE
Arcege


ฉันต้องการทราบสิ่งที่ตรงกันข้าม - อนิจจาจะฆ่าทุบตีเพื่อให้แน่ใจว่ามันจะบันทึกประวัติศาสตร์ของเขา - และสิ่งนี้ตอบคำถามของฉันขอบคุณ
mveroone

3

ผมแปลกใจที่เห็นไม่มีใครได้แนะนำทันทีก่อนที่จะhistory -c exitIINM (ฉันไม่ชำนาญ) ที่จะทำอย่างดี


2
คุณกำลังติดตามที่ถูกต้อง: history -rจะอ่านไฟล์ประวัติอีกครั้งดังนั้นการบันทึกจึงกลายเป็นแบบไม่ใช้งาน
Simon Richter

การล้างประวัติเป็นนิสัยที่ไม่ดี ... ประวัติเชลล์มีข้อมูลที่เป็นประโยชน์มากมายเกี่ยวกับผู้ที่ทำอะไร มันเป็นประโยชน์มากสำหรับคนที่ยังใหม่บนแพลตฟอร์มของคุณ (ยกเว้นกรณีที่คุณเป็น 100% มีความมั่นใจเกี่ยวกับคุณเอกสารการจัดการการเปลี่ยนแปลง)
แฟรงคลิน Piat

2

มีตัวแปรสภาพแวดล้อมสองตัวที่ bash ใช้เพื่อกำหนดไฟล์ประวัติและจำนวนบรรทัดที่ต้องเขียนลงไปเมื่อเชลล์ออก

คุณสามารถทิ้งประวัติเซสชันของคุณด้วยสิ่งเหล่านี้ (ตั้งค่าในระหว่างเซสชันที่คุณต้องการละเว้นจากไฟล์ประวัติของคุณ):

HISTFILE=/dev/null

หรือ

HISTSIZE=0

การทำงานอย่างใดอย่างหนึ่งใน Bash บน Fedora


1

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


0
  1. Eliได้ให้คำตอบที่ถูกต้องสำหรับ Bash ที่คุณตั้งไว้HISTSIZE=0แล้ว

  2. ฉันจะเพิ่มวิธีการที่จะทำมันสำหรับหน้าจอ GNU กดCtrl+A(หน้าจอลำดับหนี) :scrollback 0ตามด้วย นี่จะเป็นการลบประวัติย้อนกลับ ตอนนี้คุณสามารถทำได้:scrollback 15000เพื่อรีเซ็ตขนาดบัฟเฟอร์เลื่อนกลับทันที


เมื่อไหร่ OP กล่าวว่าพวกเขาได้ใช้screen(1)?
แอมเฟตามาจิน

เขาไม่ได้ แต่คุณอาจใช้ Bash ในเซสชันหน้าจอและ HISTSIZE = 0 จะยังคงเก็บรายละเอียดกิจกรรมของคุณไว้ในบัฟเฟอร์เลื่อนหน้าจอ ดังนั้นถ้าคุณต้องการความสะอาดจริงๆคุณต้องทำscrollback=0เช่นกัน
gsbabil

บัฟเฟอร์ scrollback จะถูกล้างเมื่อหน้าต่างปิด (เช่นเมื่อออกจากเชลล์) ถ้าคุณพิมพ์ Ctrl-a H ล่ะ? มันจะฆ่า logfile หรือไม่?
แอมเฟตามาจิน

@amphetamachine: ไม่มันจะเริ่มต้น / สิ้นสุดการบันทึกของหน้าต่างปัจจุบันเท่านั้น Neighther Ctrl+a HและCtrl+a :clearจะลบประวัติ Ctrl+a :scrollback 0คุณจำเป็นต้อง คุณสามารถทดสอบด้วยตัวเอง เริ่มเซสชันใหม่ cat /etc/passwdตอนนี้ทำ ตอนนี้ดำเนินการใด ๆ ดังกล่าวข้างต้น - หรือCtrl+a H Ctrl+a :clearทีนี้ลองคัดลอกจาก buffer หน้าจอโดยกดCtrl+a [ลูกศรขึ้นตามเพื่อดูว่าคุณไปคัดลอกได้ไกลแค่ไหน หากคุณทำCtrl+a :scrollbackตามด้วย a clearแล้วคุณจะไปเท่าที่คุณสามารถเห็นในหน้าต่างปัจจุบันเนื่องจากไม่มีบัฟเฟอร์การเลื่อนกลับ
gsbabil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.