Có cách nào để giữ một lệnh không được thêm vào lịch sử của bạn không?


65

Có cách nào để giữ cho lệnh không được thêm vào lịch sử của bạn không? Tôi có một lệnh mà tôi muốn tránh khỏi tệp lịch sử của mình và tôi thực sự không quan tâm đến nó ở đó khi tôi tìm kiếm lịch sử được lưu trong bộ nhớ, mặc dù điều đó ít đáng quan tâm. Có cách nào để ngăn chặn điều này không, hay tôi chỉ cần quay lại và chỉnh sửa tập tin lịch sử của mình.

cập nhật: Tôi đã không nhận ra điều này có thể là vỏ cụ thể. Vỏ của tôi là zsh. Bạn có thể trả lời cho các vỏ khác để mọi người biết cách làm điều này trong vỏ của chúng.


liên kết chéo với câu trả lời zsh: superuser.com/questions3532788/iêu
Michael Shigorin

Câu trả lời:


52

Trong ZSH :

Đầu tiên chèn setopt HIST_IGNORE_SPACEvào của bạn ~/.zshrc. Bây giờ sau khi bạn đăng nhập lại, bạn có thể thêm tiền tố vào bất kỳ lệnh nào bạn không muốn lưu trong lịch sử với a space.

Từ hướng dẫn sử dụng , 3 tùy chọn sau có thể được sử dụng để nói rằng một số dòng nhất định không nên đi vào lịch sử:

  • HIST_IGNOREinksACE không lưu trữ các lệnh có tiền tố bằng dấu cách
  • HIST_NO_STORE không lưu trữ lệnh lịch sử ( fc -l )
  • HIST_NO_FUNCTIONS không lưu trữ định nghĩa hàm

bất kỳ cơ hội nào @mmckinst trả lời hoạt động trong zsh? hoặc một cái gì đó giống như nó? hoặc có lẽ bất kỳ lệnh nào bao gồm lệnh| somecommand
xenoterracide

AFAIK không có tương đương với HISTIGNORE của bash trong zsh.
dogbane

@xeno zsh cung cấp một hàm hook preexeccó thể được sử dụng cho điều đó. Nếu nó trả về khác không, lệnh sẽ không được lưu trong lịch sử.
Keith

1
để có zsh bỏ qua một loạt các lệnh phổ biến cơ bản, tôi đã đặt bí danh cho tất cả chúng để có một khoảng trắng ở phía trước ... cho c (ls fg bg công việc thoát thiết lập lại rõ ràng); làm bí danh $ c = "$ c"; xong
Will Norris

4
Đối với những độc giả tương lai lười biếng như tôi, những người chưa biết cách thực hiện: setopt HIST_IGNORE_SPACEin~/.zshrc
Al.G.

25

Nếu bạn đang chạy lệnh nhiều lần, bạn có thể muốn sử dụng tính năng bỏ qua lịch sử của shell. Hãy nói rằng bạn có secret.server.com mà bạn ssh đến, các tệp FTP, v.v. mà bạn không muốn bất kỳ dòng nào đề cập đến secret.server.com đã lưu:

Trong bashbạn sẽ thiết lập

HISTIGNORE="*secret.server.com*"

trong khi đó trong zshtham số được gọi là

HISTORY_IGNORE="*secret.server.com*"

Bạn có thể liệt kê nhiều mẫu với dấu hai chấm ngăn cách chúng. Lưu ý rằng mỗi mẫu được khớp với dòng đầu vào đầy đủ , do đó bạn có thể cần bao gồm *. Ví dụ: những điều sau đây sẽ loại trừ fortunekhỏi lịch sử, nhưng sẽ lưu trữ fortune -l:

HISTIGNORE="*secret.server.com*:ytalk*:fortune"
HISTORY_IGNORE="*secret.server.com*:ytalk*:fortune"

Với bộ HISTIGNORE, không có gì khớp với các mẫu bạn liệt kê sẽ được lưu vào .bash_history/ .zsh_historyvà ngay cả phím mũi tên lên, thường gọi lại lệnh trước đó của bạn, sẽ không hoạt động nếu phù hợp với mẫu của bạn.


3
bất kỳ cơ hội này hoạt động trong zsh?
xenoterracide

Có một lựa chọn để bỏ qua chỉ dòng bắt đầu với tài sản. Một cái gì đó muốn HISTIGNORE="^fortune*"bỏ qua fortune -lnhưng giữ myfortune?
Bernhard

@xenoterracide Nó có, nhưng tham số được đặt tên khác nhau. Tôi chỉ chỉnh sửa nó vào câu trả lời.
n.st

23

Trong bash, sử dụng HISTCONTROLbiến.

Đặt nó thành HISTCONTROL=ignorespace(hoặc HISTCONTROL=ignoreboth). Từ giờ, khi bạn bắt đầu một dòng có dấu cách , nó sẽ không được lưu trong lịch sử. Điều này tránh bao gồm lệnh không được tiết lộ trong một số tệp cấu hình.

Ngay cả như vậy nó xảy ra để quên thêm không gian và sau đó muốn quay trở lại. Để xóa một mục trong lịch sử, sử dụng history -d <index>, với indexsố được tìm thấy bằng historylệnh (cột đầu tiên).


1
Cái này có hoạt động zshkhông?
Gert

11

Cách dễ nhất cho một lần là

$ $SHELL
$$ unset HISTFILE
$$ secret-command
$$ exit
$

trong đó $đại diện cho lời nhắc của shell ban đầu và $$đại diện cho lời nhắc của lớp con. Điều này hoạt động trong bash và zsh; trong ksh bạn cần HISTFILE=/notwritablethay thế. Lưu ý rằng điều quan trọng là giá trị HISTFILEkhi tệp lịch sử được viết, không phải khi lệnh được chạy. Bash, ksh và zsh ghi vào tệp lịch sử khi chúng thoát (zsh có thể làm điều đó thường xuyên hơn tùy thuộc vào cấu hình).

Ngoài ra, bạn có thể nhận bash hoặc zsh để bỏ qua các dòng khớp với các mẫu nhất định (điều này đã được bao phủ bởi các câu trả lời khác).

Một khả năng khác trong zsh là

% fc -p
% secret-command
% fc -P

fc -pđẩy danh sách lịch sử hiện tại lên ngăn xếp và bắt đầu một danh sách mới không liên quan đến tệp lưu. fc -Pbật ra danh sách lịch sử chưa lưu khỏi ngăn xếp và quên nó hoàn toàn.

Trong khi một tiến trình đang chạy, lệnh và các đối số của nó (và trên một số hệ thống, môi trường của nó cũng sẽ hiển thị trong bảng quy trình ( psđầu ra). Root có thể thấy các lệnh trong quá khứ trong cơ sở dữ liệu kế toán hệ thống và có thể ghi nhật ký nhiều hơn mà không cần sự kiểm soát của bạn. Và có lẽ sẽ có tất cả các loại bằng chứng pháp y có thể hiển thị đại khái lệnh bạn đã chạy (chẳng hạn như thời gian sửa đổi tệp). Vì vậy, bạn không có được sự riêng tư chống lại những kẻ nghe trộm xác định.

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.