Để có thể tắt mở rộng lịch sử trên một dòng lệnh cụ thể, bạn có thể sử dụng space
làm ký tự thứ 3 của $histchars
:
histchars='!^ '
Sau đó, nếu bạn nhập lệnh của mình với khoảng trắng ở đầu, mở rộng lịch sử sẽ không được thực hiện.
bash-4.3$ echo "#!/bin/bash"
bash: !/bin/bash: event not found
bash-4.3$ echo "#!/bin/bash"
#!/bin/bash
Tuy nhiên, lưu ý rằng các khoảng trắng hàng đầu cũng được sử dụng khi $HISTCONTROL
chứa ignorespace
như một cách để nói bash
không ghi lại một dòng lệnh trong lịch sử.
Nếu bạn muốn cả hai tính năng không liên tục, bạn sẽ cần chọn một nhân vật khác làm nhân vật thứ 3 $histchars
. Bạn muốn một cái mà không ảnh hưởng đến cách diễn giải lệnh của bạn. Một vài lựa chọn:
- sử dụng dấu gạch chéo ngược (
\
): \echo foo
hoạt động nhưng có tác dụng phụ là vô hiệu hóa bí danh hoặc từ khóa.
- TAB: để chèn nó vào vị trí đầu tiên, bạn cần nhấn Ctrl+VTabmặc dù.
nếu bạn không nhớ gõ hai phím, bạn có thể chọn bất kỳ nhân vật mà bình thường không xuất hiện ở vị trí đầu tiên ( %
, @
, ?
, lấy của riêng bạn) và tạo một bí danh có sản phẩm nào cho nó:
histchars='!^%'
alias %=
Sau đó nhập ký tự đó, dấu cách và lệnh của bạn:
bash-4.3$ % echo !!
!!
(bạn sẽ không thể không ghi lại một lệnh mà thay lịch sử đã bị vô hiệu mặc dù. Cũng lưu ý rằng mặc định nhân vật thứ 3 của $histchars
là #
để mở rộng lịch sử không được thực hiện trong ý kiến. Nếu bạn thay đổi nó, và bạn nhập ý kiến tại nhắc nhở, bạn nên biết thực tế là! trình tự có thể được mở rộng ở đó).