Tôi muốn thực thi một số lệnh nhưng không muốn lưu trữ chúng trong lịch sử lệnh. Vì vậy, không ai có thể tìm kiếm nó trong .bash_history
tập tin.
Có cách nào để thực hiện các lệnh bash theo cách này không?
Tôi muốn thực thi một số lệnh nhưng không muốn lưu trữ chúng trong lịch sử lệnh. Vì vậy, không ai có thể tìm kiếm nó trong .bash_history
tập tin.
Có cách nào để thực hiện các lệnh bash theo cách này không?
Câu trả lời:
Bắt đầu lệnh của bạn với một khoảng trắng và nó sẽ không được đưa vào lịch sử.
Xin lưu ý rằng điều này không yêu cầu biến môi trường $HISTCONTROL
được đặt.
Kiểm tra xem lệnh sau trả về ignorespace
hay
ignoreboth
#> echo $HISTCONTROL
Để thêm biến môi trường nếu thiếu, dòng sau có thể được thêm vào hồ sơ bash. Ví dụ%HOME/.bashrc
export HISTCONTROL=ignorespace
Sau khi tìm nguồn cung cấp hồ sơ, các lệnh tiền tố không gian sẽ không được ghi vào $HISTFILE
Trong bất kỳ phiên Bash nào, hãy đặt tệp lịch sử thành / dev / null bằng cách nhập:
export HISTFILE=/dev/null
Lưu ý rằng, như đã chỉ ra trong các bình luận, điều này sẽ không ghi bất kỳ lệnh nào trong phiên đó vào lịch sử!
Vui lòng không làm phiền với công việc khó khăn của quản trị viên hệ thống của bạn;)
Giải pháp của Doodad thanh lịch hơn. Đơn giản chỉ cần bỏ đặt biến: unset HISTFILE
(cảm ơn!)
/dev/null
quyền được đặt thành 0600 khi đăng xuất. Thay vào đó tôi đã sử dụng unset HISTFILE
.
Phần mở rộng câu trả lời của @John Doe & @ user3270492. Nhưng, điều này dường như làm việc cho tôi.
<your_secret_command>; history -d $((HISTCMD-1))
Bạn không nên thấy mục nhập của lệnh trong lịch sử của bạn.
Đây là lời giải thích ..
'Lịch sử -d' xóa mục được đề cập khỏi lịch sử.
HISTCMD lư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.
Bạn có thể cân nhắc sử dụng shell mà không có lịch sử, như có lẽ
/bin/sh << END
your commands without history
END
(có lẽ /bin/dash
hoặc /bin/sash
có thể phù hợp hơn /bin/sh
)
hoặc thậm chí tốt hơn sử dụng các tiện ích hàng loạt, ví dụ
batch << EOB
your commands
EOB
Lịch sử sau đó sẽ chứa sh
hoặc batch
không có ý nghĩa
Bạn có thể bắt đầu phiên của bạn với
export HISTFILE=/dev/null ;history -d $(history 1)
sau đó tiến hành với việc làm lén lút của bạn. Đặt histfile thành /dev/null
sẽ được ghi vào tệp lịch sử, tuy nhiên mục này sẽ dễ dàng bị xóa và không có dấu vết (ít nhất là trong tệp lịch sử) sẽ được hiển thị.
Ngoài ra, điều này là không vĩnh viễn.
Như Doodad đã đề cập trong các bình luận , unset HISTFILE
điều này rất hay, nhưng trong trường hợp bạn cũng muốn xóa một số lịch sử, hãy làm echo $HISTFILE
để lấy vị trí tệp lịch sử (thông thường ~/.bash_history
) unset HISTFILE
, và chỉnh sửa ~/.bash_history
(hoặc bất cứ điều gì HISTFILE
- tất nhiên là bây giờ unset
để bạn có thể ' t đọc nó).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Sau đó, bạn đã chỉnh sửa lịch sử của mình và thực tế là bạn đã chỉnh sửa nó!
unset HISTFILE; echo TEST; history
sẽ cung cấp cho bạn lệnh echo TEST
như trước để cuối cùng. Mặc dù sau khi kết thúc phiên và kết nối lại, lịch sử không có mục này thực sự. Vì vậy, tôi sẽ nói rằng nó hoạt động :)
unset HISTFILE
dường như không dừng các lệnh được ghi lại trong lịch sử trong bộ nhớ, nhưng nó ngăn chúng được ghi lại trong bất kỳ tệp nào $ HISTFILE. Vì vậy, tôi đoán bạn vẫn còn lịch sử cục bộ trong bộ nhớ, nhưng nó không được ghi lại trong một tệp nữa, đó là những gì bạn có thể muốn! ;)
Bạn cũng có thể sử dụng lệnh sau:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Tôi nghĩ rằng đó là một lệnh rất di động.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
và bây giờ Bạn có thể làm điều đó như thế này:mysql -uroot -pSecretPassword ; forget
$s
và những thứ khác trong sed. function forget() { // put code here // }
Nếu bạn đang sử dụng zsh, bạn có thể chạy:
setopt histignorespace
Sau khi được đặt, mỗi lệnh bắt đầu bằng khoảng trắng sẽ bị loại khỏi lịch sử.
Bạn có thể sử dụng bí danh trong .zshrc
để tắt chức năng này on / off :
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
Có một số cách bạn có thể đạt được điều này. Điều này đặt kích thước của tệp lịch sử thành 0:
export HISTFILESIZE=0
Điều này đặt tệp lịch sử thành /dev/null
, vô hiệu hóa nó:
export HISTFILE=/dev/null
Đối với các lệnh riêng lẻ, bạn có thể tiền tố lệnh với khoảng trắng và nó sẽ không được lưu trong tệp lịch sử. Lưu ý rằng điều này đòi hỏi bạn phải có ignorespace
giá trị được bao gồm trong $HISTCONTROL
biến môi trường (man bash và tìm kiếm ignorespace
để biết thêm chi tiết).
Bạn chỉ cần chạy:
$ set +o history
Để xem thêm, hãy chạy:
$ man set
set -x history
sau đó, nó hoạt động.
Lệnh này có thể có ích. Điều này sẽ không ghi lại lệnh được thực thi
history -d $((HISTCMD-1)) && <Your Command Here>