Tránh giữ lệnh trong lịch sử


33

Tôi sử dụng bash và tôi muốn tránh một số lệnh được giữ trong lịch sử.

  • Có thể làm điều đó cho lệnh tiếp theo không?
  • Có thể làm điều đó cho toàn bộ phiên?

Lưu ý rằng nếu mục tiêu là ẩn mật khẩu trong các đối số dòng lệnh, chúng sẽ vẫn hiển thị thông qua ps
Benitok

Câu trả lời:


36

và tôi chỉ nhớ một câu trả lời khác, đây là câu trả lời thực sự cho câu hỏi của bạn.

nếu bạn có "khoảng trống" trong HISTCONTROL, thì bash sẽ không nhớ bất kỳ dòng nào bắt đầu bằng ký tự khoảng trắng. nó sẽ không xuất hiện ngay cả trong lịch sử của shell hiện tại, chứ chưa nói đến việc được lưu vào $ HISTFILE.

ví dụ: tôi đã xuất HISTCONTROL = 'ignboth: erasingups' trong ~ / .bashrc của tôi

Dưới đây là chi tiết từ trang bash man:

HISTCONTROL
  Một danh sách các giá trị được phân tách bằng dấu hai chấm kiểm soát cách các lệnh
  lưu trong danh sách lịch sử. Nếu danh sách các giá trị bao gồm
  bỏ qua không gian, các dòng bắt đầu bằng ký tự khoảng trắng thì không
  lưu trong danh sách lịch sử. Giá trị của bỏ qua gây ra dòng
  phù hợp với mục lịch sử trước đó để không được lưu. Giá trị của
  ignboth là tốc ký cho không gian và bỏ qua. Một giá trị
  của việc xóa bỏ gây ra tất cả các dòng trước khớp với dòng hiện tại
  để được xóa khỏi danh sách lịch sử trước khi dòng đó được lưu.
  Bất kỳ giá trị không có trong danh sách trên được bỏ qua. Nếu HISTCONTROL là
  bỏ đặt hoặc không bao gồm giá trị hợp lệ, tất cả các dòng được đọc bởi
  trình phân tích cú pháp shell được lưu trong danh sách lịch sử, tùy thuộc vào giá trị
  của LỊCH SỬ. Dòng thứ hai và tiếp theo của một dòng nhiều
  lệnh ghép không được kiểm tra và được thêm vào lịch sử
  bất kể giá trị của HISTCONTROL.

1
+1 cho trò lừa không gian: D
petrus

19

Dưới đây là một vài bài học lịch sử tôi học được từ việc googling:

Bạn có thể đặt lịch sử để bỏ qua các chuỗi nhất định. Trong ví dụ này, tôi đã bỏ qua các lệnh ls, passwd và bất kỳ lệnh nào được tiền tố bởi không gian ký tự.

xuất HISTIGNORE = "ls: passwd:"

Để tắt lịch sử cho phiên của bạn, bạn có thể phát hành:

xuất HISTSIZE = 0

Tài liệu tham khảo


7

Nếu bạn chỉ muốn xóa lệnh cuối cùng khỏi lịch sử, thì bạn có thể nhấn Up-arrow, theo sau là Ctrl - U(xóa đến đầu dòng), sau đó Up-arrowmột lần nữa.

Bạn có thể xóa bất kỳ dòng cá nhân nào khỏi lịch sử như thế này. Chỉ cần sử dụng mũi tên lên hoặc tìm kiếm hoặc bất cứ điều gì để biến nó thành dòng lệnh hiện tại đang được chỉnh sửa, sau đó nhấn Ctrl - Uvà sau đó Up-arrowhoặc Down-arrowđể chuyển sang dòng lịch sử khác.

Tôi tình cờ phát hiện ra điều này một ngày trước. Tôi không biết liệu nó được ghi lại hay không.

Tuy nhiên, nói chung, sẽ ít rắc rối hơn khi không lưu lại lịch sử của trình bao hiện tại với:

HISTFILE=/dev/null

3

Bạn có thể bỏ đặt HISTFILEbiến. Từ man bash:

  LỊCH SỬ
         Tên của tệp trong đó lịch sử lệnh được lưu (xem NGAY-
         Câu chuyện dưới đây). Giá trị mặc định là ~ / .bash_history. Nếu không đặt,
         lịch sử lệnh không được lưu khi trình bao tương tác
         lối thoát hiểm

Tôi không nghĩ rằng điều này ngăn lệnh xuất hiện trong lịch sử shell cục bộ trước khi shell thoát ra.


2

Tôi thỉnh thoảng làm

export HISTFILE=/dev/null

1

Tôi thấy rằng không ai viết phương pháp này, vì vậy tôi sẽ.

history -d $((HISTCMD-1)) && history -d <command or number of command>

history -d xóa các mục được đề cập từ lịch sử.

HISTCMDlưu trữ Command_number của lệnh sẽ được thực thi tiếp theo. Vì vậy, (HISTCMD-1) đề cập đến lệnh được thực hiện cuối cùng.

Tôi đã làm một bộ phim bash ngắn cho thấy cách thức hoạt động của nó: https://asciinema.org/a/dtxpuovhty0obhln50soqypt2

Sau khi chạy lệnh và vì nó cũng tự xóa lệnh, sau đó đi lên bằng mũi tên sẽ không hiển thị lệnh, vì vậy nếu bạn có kế hoạch sử dụng thường xuyên, tốt nhất nên tạo bí danh:

alias hc='history -d $((HISTCMD-1)) && history -d $1'

Sau đó, bạn có thể làm:

$ hc command
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.