Làm thế nào để ngăn Bash thay đổi lịch sử?


26

Nếu tôi nhấn mũi tên Lên hoặc Xuống trên bàn phím và sau đó sửa đổi một cái gì đó từ lịch sử của tôi, nó sẽ thay đổi mãi mãi. Ngay cả khi tôi nhấn Ctrl-C và sau đó thử đưa nó lên một lần nữa, nó vẫn thay đổi - tôi đã mất mục đó trong lịch sử của mình.

Làm thế nào tôi có thể ngăn chặn điều này xảy ra?


3
Tôi thích tiêu đề của câu hỏi này. Bạn thực sự có thể thay đổi lịch sử và bạn đang phàn nàn? Chuyện gì xảy ra với bạn vậy?!
Daniel Beck

@Daniel: Lol, yeah ... Ý tôi là, như thể tôi đang thay đổi quá khứ của mình. Rõ ràng là vô nghĩa, và nó trở nên khó chịu một cách lố bịch sau một thời gian. : \
Mehrdad

Btw, nếu bạn sử dụng history-search-xxx thay vào đó, hành vi sẽ khác. Có lẽ đó là một cái gì đó cho bạn?
Daniel Beck

@Daniel: Điều đó thực sự hữu ích - cảm ơn rất nhiều. Tuy nhiên, tôi vẫn muốn biết câu trả lời cho câu hỏi này, bởi vì đôi khi các lệnh không giống nhau nhiều lắm và điều đó không hiệu quả.
Mehrdad

tìm kiếm lịch sử với một dấu nhắc trống hoạt động giống như lịch sử thông thường trước / sau, tức là hiển thị tất cả các mục.
Daniel Beck

Câu trả lời:


17

Bạn muốn cài đặt đường dẫn:

set revert-all-at-newline on

Bạn có thể đặt nó vào ~/.inputrc(xem ghi chú bên dưới) hoặc đặt bind 'revert-all-at-newline on'vào ~/.bashrc.

Bản giới thiệu:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

Thông tin chi tiết có trong trang của Bash :

revert-all-at-newline

Nếu được đặt thành ' on', Readline sẽ hoàn tác tất cả các thay đổi đối với các dòng lịch sử trước khi quay lại khi dòng chấp nhận được thực thi. Theo mặc định, các dòng lịch sử có thể được sửa đổi và giữ lại các danh sách hoàn tác riêng lẻ qua các cuộc gọi để đọc. Mặc định là ' off'.


Chú thích:

Nếu một ~/.inputrctệp mới được tạo cho mục đích cài đặt revert-all-at-newline, hãy lưu ý rằng bash sẽ sử dụng cài đặt đường đọc trong tệp này thay vì bất kỳ cài đặt nào có thể có trong tệp /etc/inputrc. Đó là, mọi cài đặt được chỉ định trong /etc/inputrcsẽ không còn hiệu lực. Do đó, nếu /etc/inputrctệp tồn tại, bạn nên bắt đầu ~/.inputrcvới dòng:

$include /etc/inputrc


Bạn thật tuyệt vời, đó chính xác là những gì tôi cần. Tôi không còn muốn đấm vào màn hình nữa. : D +1000000 (tôi muốn)
Mehrdad

5

Tôi nhập:

ls /tmp

- Tuyệt vời. Bây giờ tôi sẽ không nhập

ls /temp 

và có thể ngăn nó đi vào lịch sử, do đó ngăn nó ghi đè ls / tmp, nếu tôi bắt đầu lệnh bằng một khoảng trống:

 ls /temp

Thật khó để nhìn thấy, nhưng nếu bạn biết điều đó ...

Nó được kiểm soát bởi

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

Bỏ qua chỉ bỏ qua các lệnh trùng lặp, ignboth bỏ qua khoảng trắng ở đầu dòng, rất hữu ích, để ẩn các mật khẩu không được sử dụng.

Nhưng có lẽ bạn đang tìm giải pháp, trong đó bạn kết thúc bằng cả hai lệnh, lệnh cũ chưa sửa đổi và lệnh mới. Phiên bản bash hoặc cài đặt của tôi hoạt động như thế này, nhưng tôi không biết, có gì khác với bạn.


Hà; Tôi luôn cho rằng việc không lưu các lệnh với không gian hàng đầu là một lỗi. Cảm ơn. :)
đăng
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.