Bazı komutları yürütmek istiyorum ancak komut geçmişinde saklamak istemiyorum. Böylece kimse .bash_history
dosyayı dosyada arayamaz.
Bash komutlarını bu şekilde yürütmenin bir yolu var mı?
Bazı komutları yürütmek istiyorum ancak komut geçmişinde saklamak istemiyorum. Böylece kimse .bash_history
dosyayı dosyada arayamaz.
Bash komutlarını bu şekilde yürütmenin bir yolu var mı?
Yanıtlar:
Komutunuzu bir boşlukla başlatın, geçmişe dahil edilmeyecektir.
Bunun ortam değişkeninin $HISTCONTROL
ayarlanmasını gerektirdiğini unutmayın .
Aşağıdaki komutun döndüğünden emin olun ignorespace
veya
ignoreboth
#> echo $HISTCONTROL
Eksikse ortam değişkenini eklemek için, bash profiline aşağıdaki satır eklenebilir. Örneğin%HOME/.bashrc
export HISTCONTROL=ignorespace
Profile yeniden kaynak sağlandıktan sonra, alan ön ekli komutların üzerine yazılamaz $HISTFILE
Herhangi bir Bash oturumunda, aşağıdakileri yazarak geçmiş dosyasını / dev / null olarak ayarlayın.
export HISTFILE=/dev/null
Yorumlarda belirtildiği gibi, bunun o oturumda tarihe herhangi bir komut yazmayacağını unutmayın!
Sadece sistem yöneticinizin sıkı çalışmasıyla uğraşmayın, lütfen;)
Doodad'ın çözümü daha zariftir. Sadece değişkenin ayarını kaldırın: unset HISTFILE
(teşekkürler!)
/dev/null
, çıkışta 0600 olarak ayarlanan izinlerle ilgili sorunlara neden oldu . Bunun yerine kullandım unset HISTFILE
.
@John Doe & @ user3270492'nin cevabının bir uzantısı. Ama bu benim için işe yarıyor gibi görünüyor.
<your_secret_command>; history -d $((HISTCMD-1))
Komutun geçmişinizde girişini görmemelisiniz.
İşte açıklama ..
'Tarih -d' adı geçen girdiyi geçmişten siler.
HISTCMD, daha sonra yürütülecek komutun komut numarasını kaydeder. Yani, (HISTCMD-1) son yürütülen komutu ifade eder.
Tarihsiz bir kabuk kullanmayı düşünebilirsiniz, örneğin
/bin/sh << END
your commands without history
END
(belki de /bin/dash
ya da /bin/sash
daha fazla uygun olabilir /bin/sh
)
veya toplu iş yardımcı programını daha iyi kullanın;
batch << EOB
your commands
EOB
Tarih o zaman çok anlamlı olmayan sh
ya batch
da içermez
Oturumunuza aşağıdakilerle başlayabilirsiniz:
export HISTFILE=/dev/null ;history -d $(history 1)
sonra sinsi işlerinle devam et. HISTFILE Ayarlama için /dev/null
geçmiş dosyasına kaydedilir, henüz bu girişin kolaylıkla silinecek ve (geçmiş dosyasında en azından) izi gösterilecektir.
Ayrıca, bu kalıcı değildir.
Doodad tarafından yorumlarda belirtildiği gibi , unset HISTFILE
bunu güzel bir şekilde yapar, ancak bazı geçmişleri de silmek istiyorsanız echo $HISTFILE
, geçmiş dosyası konumunu (genellikle ~/.bash_history
) almak unset HISTFILE
ve düzenlemek ~/.bash_history
(veya ne olursa olsun HISTFILE
- elbette şimdi unset
yapabilirsiniz ' t okuyun).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Sonra geçmişinizi ve onu düzenlediğiniz gerçeğini düzenlediniz!
unset HISTFILE; echo TEST; history
size echo TEST
sondan bir önceki gibi komut verecektir . Her ne kadar oturumu sonlandırıp tekrar bağlandıktan sonra, tarih gerçekten bu girişe sahip değildir. Bu yüzden işe yaradığını söyleyebilirim :)
unset HISTFILE
komutların bellekte geçmişte kaydedilmesini durdurmuyor gibi görünmektedir, ancak $ HISTFILE dosyasının hangi dosyaya kaydedildiğini durdurmaz. Bu yüzden sanırım yerel geçmişiniz hala bellekte, ancak artık bir dosyaya kaydedilmiyor, bu da isteyebilirsiniz! ;)
Aşağıdaki komutu da kullanabilirsiniz:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
Bence bu çok taşınabilir bir komut.
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
ve şimdi böyle bir şey yapabilirsiniz:mysql -uroot -pSecretPassword ; forget
$s
sed ve başka şeyler değiştirmek için takma ad yerine işlev oluşturmanız gerektiğini anlıyorum . function forget() { // put code here // }
Eğer zsh kullanıyorsanız çalıştırabilirsiniz:
setopt histignorespace
Bu ayarlandıktan sonra, boşlukla başlayan her komut geçmişin dışında bırakılır.
Sen kullanabilirsiniz takma adları içinde .zshrc
bu açmak için açma / kapama :
# 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."'
Bunu başarmanın birkaç yolu vardır. Bu, geçmiş dosyasının boyutunu 0 olarak ayarlar:
export HISTFILESIZE=0
Bu, geçmiş dosyasını /dev/null
etkin bir şekilde devre dışı bırakacak şekilde ayarlar :
export HISTFILE=/dev/null
Tek tek komutlar için, komutun önüne bir boşluk ekleyebilirsiniz, bu komut geçmiş dosyasına kaydedilmez. Bunun ignorespace
için $HISTCONTROL
ortam değişkenine dahil edilen değere sahip olmanız gerektiğini unutmayın (man bash ve ignorespace
daha fazla ayrıntı için arama yapın ).
Sadece koşmanız gerekiyor:
$ set +o history
Daha fazlasını görmek için şunu çalıştırın:
$ man set
set -x history
Sonradan ters komutu eklediğimiz sürece çalışır.
Bu komut kullanışlı olabilir. Bu, yürütülen komutu kaydetmez
history -d $((HISTCMD-1)) && <Your Command Here>