it-swarm-vi.com

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

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 loại 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.

128
Naftuli Kay

Đâ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
173
SiegeX

Sử dụng bash, đặt HISTCONTROL="ignorespace" và đi trước với không gian 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 có 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.

33
forcefsck

Đảm bảo rằng HISTCONTROL chứa ignorespace. Bạn có thể muốn thêm HISTCONTROL=ignorespace (Hoặc HISTCONTROL=ignoredups:ignorespace Hoặc một cái gì đó) vào ~/.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

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. Cách đầ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ớ của 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 lệnh one đượ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 Shell thoát.

    Vô giá trị HISTFILE='' và/hoặc được đặt thành HISTFILE=/dev/null hoạ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ớ, hãy thử lệnh history 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 mới các lệnh 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 là 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ệ.

6
Isaac

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_history tập tin.

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

Lệnh pwd sẽ không lưu trữ trong lịch sử, vì nó có khoảng trắng ở phía trước.

3
Kalanidhi M.
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.

2
Ambrose

Để đưa câu trả lời của SiegeX thêm một chút và thực sự biến điều này thành chế độ ẩn danh ...

Disclaimer: công cụ tiêu đề có thể sẽ hoạt động trên gnome-terminal. nó chỉ được thử nghiệm trong Linux Mint 19.3/Gnome Terminal 3.28.1 vì tôi lười biếng.

Thêm phần sau vào ~/.bash_functions (Điều này giả sử bạn đang nhập thông qua .bashrc/.profile, V.v.):

function setGnomeTerminalTitle() {
    local NEW_TITLE="$1";
    PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}

Sau đó thêm phần sau vào ~/.bash_aliases (Một lần nữa, điều này giả định rằng bạn đang nhập nó qua .bashrc/.profile, V.v.):

alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"[email protected]$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"

EDIT: để giải thích nội dung tiêu đề histon - thông thường tiêu đề cửa sổ trong gnome-terminal là "$ USER @ $ HOSTNAME: $ {PWD}" ngoại trừ nếu bạn đang ở trong thư mục nhà của bạn,/home/foo, nó sẽ được hiển thị dưới dạng ~; ít nhất nó là trên máy tính của tôi. lệnh này đang sử dụng các thay thế chuỗi bash để thoát các dấu gạch chéo trong $HOME để chúng tôi nhận được \/home\/foo và sau đó lần lượt sử dụng đó làm biểu thức chính để thay thế mẫu đó trong $PWD bằng chữ ~ ... và sau đó một loạt các lối thoát được thêm vào đầu để làm cho nó hoạt động như một bí danh trong một chuỗi trích dẫn kép.

Bây giờ khi bạn nhập histoff bạn sẽ nhận được thay đổi tiêu đề cho chế độ ẩn danh và lịch sử của bạn bị dừng cho phiên đó trong cửa sổ đó (Word histoff vẫn được ghi lại nhưng không có gì sau đó). Nếu sau đó bạn nhập histon thì nó sẽ hoàn nguyên tiêu đề và tất cả các dòng sau histoff cho đến và bao gồm cả dòng có histon không được ghi lại nhưng mọi thứ sau histon được ghi lại.

Thí dụ:

## this is still logged
histoff  

## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;

vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt

## this is still NOT logged
histon

## this is logged again
Sudo apt install -y kmag;

0
zpangwin