Belirli bir kabukta bash_history'yi geçici olarak askıya al?


115

Bir tür "gizli" moda girmek için tarih takibini bash olarak geçici olarak askıya almanın bir yolu var mı? Terminalime kaydedilmesini istemediğim, hassas finansal bilgiler verdiğim şeyleri giriyorum.

Yanıtlar:


153

Aradığın şey bu olmalı:

unset HISTFILE

itibaren man bash

HISTFILE ayarlanmamışsa veya geçmiş dosyası istenmeyen ise, tarih kaydedilmez.

Alternatif olarak, kapatmak ve tekrar açmak isterseniz, kullanımı daha kolay olabilir set:

Kapat

set +o history

set -o history

12
Değeri HISTFILEyalnızca bash çıktığında kontrol edilir, bu nedenle ilk yöntem olduğu gibi çalışmaz (değeri geri yüklerseniz, komut kaydedilir). set +o historyyönlendirildiği gibi çalışır.
Gilles,

5
Teşekkürler, mükemmel. Gizli şeyler yaparken ileri geri geçiş yapmak için kullanacağım set +o historyve kullanacağım set -o history;)
Naftuli Kay

1
unset HISTFILEçalışmıyor. set -/+o historytıkır tıkır çalışıyor! teşekkürler
kholofelo Maloma

4
Bir ipucu olarak, komuttan önce bir boşluk koyarsanız (komutu boşlukla başlatın) geçmişinize kaydedilmez ve yukarı / aşağı ok tuşları da göstermez.
Mehdi,

1
Bu zsh btw'de işe yaramayacak
Shubham Chaudhary

33

Bash kullanarak, HISTCONTROL="ignorespace"tarihe kaydedilmesini istemediğiniz herhangi bir komutu boşluk ile ayarlayın . Herhangi bir önlem almayı unuttuysanız, history -d <number>belirli bir girişi silmek veya history -ctüm komut geçmişini silmek için de vardır.


27

HISTCONTROLİçerdiğinden emin olun ignorespace. Muhtemelen bilgisayarınıza eklemek HISTCONTROL=ignorespace(veya HISTCONTROL=ignoredups:ignorespaceveya başka bir şey) isteyeceksiniz ~/.bashrc. Daha sonra boşlukla başlayan herhangi bir komut satırı geçmişten çıkarılır.

Bir başka olasılık da geçmişini kaydetmeyen yeni bir bash oturumu başlatmak.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

Birkaç komut saklamaktan kaçınmanız gerekiyorsa ve önceki komutlara erişmek için hala yukarı ok kullanmak istiyorsanız, aşağıdakileri kullanın:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

Komutların nasıl kaydedildiğini kontrol etmenin dört yolu (seviye) vardır.

  1. İlk ve en basit olanı kullanmaktır ignorespace(veya görmezden gelinir):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    Bu, hafıza listesine kaydedilmesini önlemek istediğiniz komutlardan önce bir boşluk kullanmanıza izin verecektir history. Sonuç olarak, bellekte kaydedilmiş hiçbir komut olmadığından dosyaya gönderilebilecek bir komutun içinde listelenen dosyaya gönderilmesini de önleyecektir $HISFILE.

  2. Dosyaya komutları kaydetmekten kaçının $HISTFILE:

    $ unset HISTFILE

    Eğer ayarlanmamışsa, bir kabuk çıkarken komut geçmişi kaydedilmez.

    Boş HISTFILE=''ve / veya HISTFILE=/dev/nullaynı etkiye ayarlanmış olarak ayarlayın . Komutların hala hafıza listesine kaydedildiğini anlayın, historykomutu veya yukarı oku deneyin .

    Uyarı: HISTFILE, kabuk mevcut olmadan önce sıfırlanırsa, belleğe kaydedilenlerin hepsi yine de dosyaya yazılabilir.

  3. Bellekteki geçmiş listesine yeni komutlar kaydetmekten kaçının . Ve bellekte olmadığı için dosyaya kaydedilemez.

    $ shopt -ou history              # or set +o history

    shopt -os history(Veya set -o history) ile tekrar etkinleştir

  4. Bellekteki tüm komutları geçmiş listesine kaldır:

    $ HISTSIZE=0

    Tüm komutlar silinir (bellekten) ve bu nedenle değişken, geçerli bir sayısal değere tekrar ayarlanıncaya kadar, hiçbir şey dosyaya kaydedilemedi.


//, Bu, @Ambrose'dan gelen cevap dışındaki tüm cevapları tek bir kullanışlı sayfada kapsar. Gitme yolu @Isaac. Bunun için dokümanlar için bir veya iki link eklemek ister misiniz? Kesinlikle man historyçoğumuz için kesmeyecek.
Nathan Basanese,

1
@NathanBasanese Expanded. Daha iyi?
Isaac

// , Evet! Bunların Bash Değişkenleri ve Shopt Dahili dokümanlarından geldiğini varsaymakta doğru olur muydum ?
Nathan Basanese

Ben okurken // Ayrıca Bash Değişkenler belgesini , ben rastladım HISTIGNOREki, subsumesişlevi HISTCONTROL.
Nathan Basanese

(Linux kullandığınızı varsayarsak): Komutu uygularsanız ne olur LESS=+'/^ *HISTI' man bash("manuel sayfalar" değil?). @NathanBasanese
Isaac

3

Geçmişi kapatmanın basit bir yolu vardır, bu nedenle komutlar .bash_historydosyada saklanmaz .

Boşluk veya sekme boşluğunu herhangi bir komutun önüne koymanız gerekir, böylece bu komut geçmişe kaydedilmez. Örneğin:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

pwdO önünde boşluk olduğundan komut, tarihteki mağaza alamayacak.


Bu çalışmıyor; Bash, '-' veya '-history' veya başka tirelenmiş komutların bulunamadığından şikayet eder.
Samuel A. Falvo II

2
HISTCONTROL = "ignorespace", forcefsck'in yanıtında olduğu gibi ayarlanmadıkça bu işe yaramaz
DeveloperChris

1
export HISTFILE=/dev/null 

Bu benim yolum. Sadece HISTORY / HISTFILE / HISTCONTROL, vb ... setinin işe yaramaması durumunda, / dev / null 'a dışa aktarma her zaman benim için çalıştı.


Geçici olarak tarihi askıya almak için mi? Bu benim için normal bir emir olarak işe yaramadı. Sonraki komutlar tarihe kaydedildi. Bunu .bash_profile veya bir komut dosyasında mı çağırıyorsunuz? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.