Bash tarihinin davranışını anlamak için önce aşağıdakileri bilmeniz gerekir:
- Geçmiş dosyasında geçmiş var.
- Bir bash sürecinin hafızasında tarih vardır.
- Bir bash işleminin belleğindeki geçmiş, başka bir bash işleminin belleğindeki geçmişle senkronize edilmez.
- Bir bash işleminin belleğindeki geçmiş, açıkça sorulmadıkça veya belirli bir olay sırasında (geçmişe bakın), dosyadaki geçmişle senkronize edilmez.
Varsayılan ayarları kullanarak, bir bash oturumunun geçmişe ilişkin yaşam döngüsü aşağıdaki gibidir:
- Başlangıç sırasında bash geçmiş dosyasını okuyacaktır. Geçmiş dosyasının içeriği şimdi bash işleminin belleğindedir.
- Normal kullanım sırasında sadece bellekteki geçmiş manipüle edilir.
- Kapatma sırasında bellekteki geçmiş, geçmiş dosyasının önceki içeriğinin üzerine yazarak geçmiş dosyasına yazılır.
Gözlemlediğiniz görünüşte belirsiz davranış, çoğunlukla geçmiş dosyasının içeriğinin her zaman son kapalı bash oturumunun geçmişi olması ve bash yalnızca başlatma sırasında geçmiş dosyasını okumasıdır.
Başlatma ve kapatma işleminin daha ayrıntılı bir açıklaması için bash kılavuzunu okuyun .
Varsayılan ayarlarda bash varsayılan ayarlarının kastedildiğini unutmayın. Dağıtımınız bu davranışı değiştiren bir .bashrc
(veya /etc/bash.bashrc
) sağlamış olabilir .
Kabuk seçeneğini etkinleştirerek histappend
geçmiş dosyasının üzerine yazmak yerine bash'ın eklenmesini söyleyebilirsiniz. histappend
Komutu kullanarak etkinleştirebilirsiniz shopt -s histappend
. Bu seçeneğin her zaman etkin olması için, komutu .bashrc
(veya başka bir başlatma dosyasına) koymanız gerekir . Bash kılavuzundakishopt
komut hakkında daha fazla bilgi edinin
Etkinleştirmenin histappend
, görünüşte belirsiz olan davranışı çok fazla azaltmayacağını unutmayın . Çünkü her bash oturumunun hala kendi geçmişi vardır. Çoğunlukla senkronize bir bash geçmişine sahip olmak mümkündür. Her bash işleminin yığın taşması üzerindeki bir iş parçacığında çoğunlukla senkronize edilmiş bir geçmişe sahip olması için bir kılavuz vardır .
yerleşik komutunu kullanarak bash'a history
geçmişi dosyadan belleğe okumasını veya bellekten dosyaya yazmasını açıkça söyleyebilirsiniz. Örneğin: history -r
dosyanın içeriğini okur ve bellekteki geçmişe ekler. history -w
önceki içeriğin üzerine yazarak mevcut geçmişi bellekten dosyaya yazacaktır. Temelde kapatma sırasında olan şey budur. Bash kılavuzundakihistory
komut hakkında daha fazla bilgi edinin
Tamlık için, geçmiş davranışını değiştiren iç değişkenlerin listesi:
HISTFILE
: okunacak ve tarih yazılacak dosya.
HISTFILESIZE
: geçmiş dosyası için maksimum satır sayısı.
HISTSIZE
: bellekteki geçmiş için maksimum satır sayısı.
HISTCONTROL
, HISTIGNORE
, HISTTIMEFORMAT
: Bu tartışma alakalı değildir. Ayrıntılar için bash kılavuzunu okuyun .