ระงับ bash_history ชั่วคราวบนเชลล์ที่กำหนดไว้หรือไม่


115

มีวิธีในการระงับการติดตามประวัติเป็นการชั่วคราวหรือไม่เพื่อที่จะเข้าสู่โหมด "ไม่ระบุตัวตน" ฉันป้อนข้อมูลลงในเครื่องเทอร์มินัลที่ฉันไม่ต้องการบันทึกข้อมูลทางการเงินที่ละเอียดอ่อน

คำตอบ:


153

นี่คือสิ่งที่คุณกำลังมองหา:

unset HISTFILE

จาก man bash

หาก HISTFILE ไม่ได้ถูกตั้งค่าไว้หรือหากไฟล์ประวัตินั้นไม่สามารถเขียนได้ประวัติจะไม่ถูกบันทึก

อีกทางเลือกหนึ่งถ้าคุณต้องการสลับมันแล้วเปิดใหม่อีกครั้งมันอาจจะใช้ง่ายกว่าset:

ปิด

set +o history

เปิด

set -o history

12
ค่าของHISTFILEจะถูกตรวจสอบเฉพาะเมื่อ bash ออกดังนั้นวิธีแรกจะไม่ทำงานตามที่เป็นอยู่ (ถ้าคุณกู้คืนค่าคำสั่งจะถูกบันทึกไว้) set +o historyทำงานตามที่กำหนดไว้
Gilles

5
ขอบคุณเยี่ยมมาก ฉันจะใช้set +o historyและset -o historyสลับไปมาเมื่อฉันทำเรื่องลับ;)
Naftuli Kay

1
unset HISTFILEไม่สำเร็จ. set -/+o historyทำงานเหมือนจับใจ! ขอบคุณ
kholofelo Maloma

4
เป็นเคล็ดลับถ้าคุณใส่ช่องว่างก่อนคำสั่ง (เริ่มต้นคำสั่งด้วยช่องว่าง) มันจะไม่ถูกบันทึกในประวัติของคุณและปุ่มลูกศรขึ้น / ลงจะไม่แสดงเช่นกัน
Mahdi

1
สิ่งนี้จะไม่ทำงานใน zsh btw
Shubham Chaudhary

33

ใช้ทุบตีตั้งHISTCONTROL="ignorespace"และนำหน้าด้วยช่องว่างคำสั่งใด ๆ ที่คุณไม่ต้องการที่จะถูกบันทึกไว้ในประวัติศาสตร์ ในกรณีที่คุณลืมที่จะใช้มาตรการใด ๆ นอกจากนี้ยังมีhistory -d <number>การลบรายการเฉพาะหรือhistory -cล้างประวัติคำสั่งทั้งหมด


27

ตรวจสอบให้แน่ใจว่ามีHISTCONTROL ignorespaceคุณอาจจะต้องการที่จะเพิ่มHISTCONTROL=ignorespace(หรือHISTCONTROL=ignoredups:ignorespaceหรือบางอย่าง) ~/.bashrcที่คุณ จากนั้นบรรทัดคำสั่งใด ๆ ที่ขึ้นต้นด้วยช่องว่างจะถูกตัดออกจากประวัติ

ความเป็นไปได้อีกอย่างคือการเริ่มเซสชัน bash ใหม่ที่ไม่ได้บันทึกประวัติ

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

หากคุณต้องการหลีกเลี่ยงการเก็บคำสั่งต่าง ๆ และคุณยังต้องการใช้ลูกศรขึ้นเพื่อเข้าถึงคำสั่งก่อนหน้าให้ใช้:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

มีสี่วิธี (ระดับ) เพื่อควบคุมวิธีการเก็บคำสั่ง

  1. สิ่งแรกและง่ายที่สุดคือการใช้ignorespace(หรือไม่สนใจทั้งสอง):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    historyที่จะช่วยให้การใช้พื้นที่ก่อนที่คำสั่งที่คุณต้องการที่จะหลีกเลี่ยงการถูกบันทึกไว้ในความทรงจำของรายการ และผลที่ตามมาเป็นมีคำสั่งไม่มีการบันทึกไว้ในหน่วยความจำที่จะถูกส่งไปยังไฟล์ที่จะหลีกเลี่ยงการเป็นหนึ่งใน$HISFILEคำสั่งจะถูกส่งไปยังแฟ้มที่ระบุไว้ใน

  2. หลีกเลี่ยงการบันทึกคำสั่งไปยังไฟล์ใน$HISTFILE:

    $ unset HISTFILE

    หากไม่ได้ตั้งค่าประวัติคำสั่งจะไม่ถูกบันทึกเมื่อเชลล์ออก

    ค่าว่างHISTFILE=''และ / หรือตั้งค่าให้ใช้HISTFILE=/dev/nullงานกับเอฟเฟกต์เดียวกัน ทำความเข้าใจว่าคำสั่งยังคงถูกบันทึกลงในรายการหน่วยความจำลองhistoryคำสั่งหรือลูกศรขึ้น

    คำเตือน: หากมีการรีเซ็ต HISTFILE ก่อนที่เชลล์จะมีอยู่สิ่งที่บันทึกไว้ในหน่วยความจำทั้งหมดสามารถเขียนลงไฟล์

  3. หลีกเลี่ยงการบันทึกคำสั่งใหม่ไปยังรายการประวัติในหน่วยความจำ และไม่ได้อยู่ในหน่วยความจำไม่สามารถบันทึกลงไฟล์ได้

    $ shopt -ou history              # or set +o history

    เปิดใช้งานอีกครั้งด้วยshopt -os history(หรือset -o history)

  4. ลบคำสั่งทั้งหมดจากไปยังรายการประวัติในหน่วยความจำ:

    $ HISTSIZE=0

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


//, ซึ่งครอบคลุมคำตอบทั้งหมดยกเว้นคำตอบจาก @Ambrose ในหน้าเดียวที่สะดวก ทางไป @Isaac คุณยินดีที่จะเพิ่มลิงค์หนึ่งหรือสองรายการในเอกสารนี้ man historyค่อนข้างแน่ใจว่าจะไม่ตัดมันสำหรับพวกเราส่วนใหญ่
นาธาน Basanese

1
@NathanBasanese ขยาย ดีขึ้นหรือไม่
Isaac

//, ใช่! ฉันจะถูกต้องหรือไม่ถ้าสมมติว่าสิ่งเหล่านี้มาจากBash VariablesและShopt Built-in docs ?
นาธาน Basanese

// นอกจากนี้ในขณะที่ผมอ่านเอกสารตัวแปรทุบตีฉันมาข้ามHISTIGNOREซึ่งการทำงานของsubsumes HISTCONTROL
นาธาน Basanese

(สมมติว่าคุณใช้ linux): จะเกิดอะไรขึ้นหากคุณเรียกใช้งานคำสั่งLESS=+'/^ *HISTI' man bash(นั่นไม่ใช่ "หน้าคู่มือ") @NathanBasanese
Isaac

3

มีวิธีง่าย ๆ ในการปิดประวัติดังนั้นคำสั่งจะไม่ถูกเก็บไว้ใน.bash_historyไฟล์

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

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

pwdคำสั่งจะไม่ได้รับการจัดเก็บในประวัติศาสตร์เพราะมีช่องว่างด้านหน้า


สิ่งนี้ไม่ทำงาน Bash บ่นว่า '-' หรือ '-history' หรือไม่พบคำสั่งยัติภังค์อื่น ๆ
Samuel A. Falvo II

2
สิ่งนี้จะไม่ทำงานเว้นแต่ HISTCONTROL = "ignorespace" ถูกตั้งค่าตามการตอบสนองของ forcefsck
DeveloperChris

1
export HISTFILE=/dev/null 

นั่นคือวิธีการข้ามไปของฉัน ในกรณีที่ไม่ได้ตั้งค่าประวัติ / HISTFILE / HISTCONTROL ฯลฯ ... ไม่ทำงานการส่งออกไปยัง / dev / null ใช้ได้สำหรับฉันเสมอ


สำหรับการระงับประวัติชั่วคราวหรือไม่ สิ่งนี้ไม่ได้ผลสำหรับฉันเป็นคำสั่งปกติ คำสั่งที่ตามมาถูกบันทึกลงในประวัติ คุณกำลังเรียกสิ่งนี้ใน. bash_profile หรือสคริปต์หรือไม่? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.