Bazı komutları yürütmek istiyorum ancak komut geçmişinde saklamak istemiyorum. Böylece kimse .bash_historydosyayı 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_historydosyayı 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 $HISTCONTROLayarlanmasını gerektirdiğini unutmayın .
Aşağıdaki komutun döndüğünden emin olun ignorespaceveya
ignoreboth
#> echo $HISTCONTROLEksikse ortam değişkenini eklemek için, bash profiline aşağıdaki satır eklenebilir. Örneğin%HOME/.bashrc
export HISTCONTROL=ignorespaceProfile 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/dashya da /bin/sashdaha 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 shya batchda 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/nullgeç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 HISTFILEbunu 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 HISTFILEve düzenlemek ~/.bash_history(veya ne olursa olsun HISTFILE- elbette şimdi unsetyapabilirsiniz ' 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; historysize echo TESTsondan 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 HISTFILEkomutları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
$ssed 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 .zshrcbu 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/nulletkin 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 ignorespaceiçin $HISTCONTROLortam değişkenine dahil edilen değere sahip olmanız gerektiğini unutmayın (man bash ve ignorespacedaha 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 historySonradan 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>