Tạm thời đình chỉ bash_history trên một vỏ nhất định?


115

Có cách nào để tạm thời tạm dừng theo dõi lịch sử trong bash, để vào một chế độ "ẩn danh" không? Tôi đang nhập nội dung vào thiết bị đầu cuối của mình mà tôi không muốn ghi lại, thông tin tài chính nhạy cảm.

Câu trả lời:


153

Đây phải là những gì bạn đang tìm kiếm:

unset HISTFILE

Từ man bash

Nếu HISTFILE không được đặt hoặc nếu tệp lịch sử không thể ghi được, lịch sử sẽ không được lưu.

Ngoài ra, nếu bạn muốn tắt nó đi và sau đó bật lại, có thể dễ sử dụng hơn set:

Tắt

set +o history

Bật

set -o history

12
Giá trị của HISTFILEchỉ được kiểm tra khi thoát bash, vì vậy phương thức đầu tiên không hoạt động như vậy (nếu bạn khôi phục giá trị, lệnh sẽ được lưu). set +o historykhông làm việc theo chỉ dẫn.
Gilles

5
Cảm ơn, xuất sắc. Tôi sẽ sử dụng set +o historyset -o historychuyển đổi qua lại khi tôi đang làm những việc bí mật;)
Naftuli Kay

1
unset HISTFILEkhông hoạt động. set -/+o historyhoạt động như một lá bùa! cảm ơn
kholofelo Maloma

4
Như một mẹo nếu bạn đặt dấu cách trước lệnh (bắt đầu lệnh bằng dấu cách), nó sẽ không được ghi lại trong lịch sử của bạn và các phím mũi tên lên / xuống cũng sẽ không hiển thị.
Mahdi

1
Điều này sẽ không hoạt động trong zsh btw
Shubham Chaudhary

33

Sử dụng bash, đặt HISTCONTROL="ignorespace"và đặt trước khoảng trắng bất kỳ lệnh nào bạn không muốn được ghi lại trong lịch sử. Trong trường hợp bạn quên thực hiện bất kỳ biện pháp nào, đó cũng là history -d <number>để xóa một mục cụ thể hoặc history -cđể xóa toàn bộ lịch sử lệnh.


27

Hãy chắc chắn rằng HISTCONTROLcó chứa ignorespace. Bạn có thể muốn thêm HISTCONTROL=ignorespace( HISTCONTROL=ignoredups:ignorespacehoặc một cái gì đó) vào của bạn ~/.bashrc. Sau đó, bất kỳ dòng lệnh bắt đầu với một khoảng trắng được bỏ qua khỏi lịch sử.

Một khả năng khác là bắt đầu một phiên bash mới không lưu lịch sử của nó.

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

5

Nếu bạn cần tránh lưu trữ một số lệnh và bạn vẫn muốn sử dụng mũi tên lên để truy cập các lệnh trước đó, hãy sử dụng:

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

Có bốn cách (cấp độ) để kiểm soát cách các lệnh được lưu trữ.

  1. Đầu tiên và đơn giản nhất là sử dụng ignorespace(hoặc ignboth):

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

    Điều đó sẽ cho phép sử dụng một khoảng trắng trước các lệnh mà bạn muốn tránh bị ghi lại trong danh sách bộ nhớ history. Và, do đó, vì không có lệnh nào được ghi trong bộ nhớ có thể được gửi đến tệp, nên cũng sẽ tránh một lệnh được gửi đến tệp được liệt kê trong $HISFILE.

  2. Tránh ghi lệnh vào tệp trong $HISTFILE:

    $ unset HISTFILE

    Nếu không được đặt, lịch sử lệnh sẽ không được lưu khi thoát khỏi trình bao.

    Null HISTFILE=''và / hoặc thiết lập để HISTFILE=/dev/nullhoạt động với cùng một hiệu ứng. Hiểu rằng các lệnh vẫn đang được ghi vào danh sách bộ nhớ, thử historylệnh hoặc mũi tên lên.

    Cảnh báo: nếu HISTFILE được đặt lại trước khi shell tồn tại, tất cả những gì đã được ghi trong bộ nhớ đều có thể được ghi vào tệp.

  3. Tránh ghi các lệnh mới vào danh sách lịch sử trong bộ nhớ. Và, như không có trong bộ nhớ, không thể được ghi vào tệp.

    $ shopt -ou history              # or set +o history

    Kích hoạt lại với shopt -os history(hoặc set -o history)

  4. Xóa tất cả các lệnh từ danh sách lịch sử trong bộ nhớ:

    $ HISTSIZE=0

    Tất cả các lệnh bị xóa (từ bộ nhớ) và do đó, không có gì có thể được lưu trữ vào tệp, cho đến khi biến được đặt lại thành một số giá trị số hợp lệ.


//, Điều này bao gồm tất cả các câu trả lời ngoại trừ câu trả lời từ @Ambrose trong một trang thuận tiện. Con đường để đi, @Isaac. Bạn có sẵn sàng thêm một hoặc hai liên kết vào tài liệu cho việc này không? Khá chắc chắn man historysẽ không cắt giảm cho hầu hết chúng ta.
Nathan Basan

1
@NathanBasan Mở rộng. Tốt hơn?
Isaac

// , Đúng! Tôi có thể đúng không khi cho rằng những thứ này đến từ các Biến BashShopt tích hợp trong tài liệu ?
Nathan Basan

//, Ngoài ra, trong khi tôi đang đọc tài liệu Biến Bash , tôi đã xem qua HISTIGNORE, subsumeschức năng của HISTCONTROL.
Nathan Basan

(Giả sử bạn đang sử dụng linux): Điều gì xảy ra nếu bạn thực thi lệnh LESS=+'/^ *HISTI' man bash(không phải là "trang thủ công"?). @NathanBasan
Isaac

3

Có một cách đơn giản để tắt lịch sử, vì vậy các lệnh sẽ không được lưu trong .bash_historytệp.

Bạn phải đặt khoảng trắng hoặc không gian tab trước bất kỳ lệnh nào, để lệnh đó sẽ không được lưu trong lịch sử. Ví dụ:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

Các pwdlệnh sẽ không được lưu trữ trong lịch sử, bởi vì nó có khoảng trắng ở phía trước.


Điều này không hoạt động; Bash phàn nàn rằng '-' hoặc '-history', hoặc các lệnh gạch nối khác không thể được tìm thấy.
Samuel A. Falvo II

2
Điều này sẽ không hoạt động trừ khi HISTCONTROL = "khoảng trống" được đặt như trong phản hồi của Forcefsck
DeveloperChris

1
export HISTFILE=/dev/null 

Đó là cách goto của tôi. Chỉ trong trường hợp unset HISTORY / HISTFILE / HISTCONTROL, v.v ... không hoạt động, xuất nó sang / dev / null luôn hoạt động với tôi.


Cho tạm đình chỉ lịch sử? Điều này đã không làm việc cho tôi như là một lệnh thông thường. Các lệnh tiếp theo đã được ghi vào lịch sử. Bạn đang gọi nó trong .bash_profile hoặc một tập lệnh? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat G Tàu ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.