Mac'teki Terminal Oturumları Arasında Bash Tarihi Korunmuyor


33

Kısa geçmişim gizemli bir şekilde çalışmayı bıraktı ve nasıl düzelteceğimi bilmiyorum. Bu benim .bashrc şöyle bir şey:

HISTSIZE=500
HISTFILESIZE=500
HISTFILE=$HOME/.bash_history

Ancak, çalıştırdığımda echo $HISTFILEyazdırır /Users/myusername/.bash_sessions/EE8689E5-7DAD-4018-817E-0AF1DE36082A.historynew.

.Bash_history dosyasının sahibiyim, bu yüzden bu sorunu nasıl gidereceğime emin değilim.

Teşekkürler!


Merhaba Nelson, Süper Kullanıcıya hoş geldiniz. Çabuk kontrol sizin tarafınızdan girilen boşluklar?
bertieb

evet onlar vardı, onları kaldırıp rapor edeceğim.

@ bertieb, boşlukları kaldırdım ve şimdi $ HISTFILESIZE uygun şekilde yankılandı. Ancak, tarih kaydedilmemiş olarak kalır ve $ HISTFILE, bu geçici temp geçmişi dosyasını (sadece bu oturum için sakladığını varsaydığım) yazdırır.

$HISTFILEİlgi alanı dışında değişmeye mi çalışıyorsun ? Ben yok .bashrcOSX'te ve echo $HISTFILEben söz konusu satırları yorum yok beklenilen ediyorum yerde herhangi bir etkisi rapor?
bertieb

1
Her zaman yol adı değişkeni genişlemeleri alıntı: HISTFILE="$HOME/.bash_history”. Tırnaklar olmadan, giriş dizininizin yolu boşluklar (veya muhtemelen başka özel karakterler) içeriyorsa sürümünüz geçersiz olacaktır.
Chris Sayfa

Yanıtlar:


26

Terminal, her bir terminal oturumuna benzersiz bir tanımlayıcı atar ve bunu, TERM_SESSION_ID ortam değişkeni üzerinden iletir; böylece bir terminalde çalışan programlar, Devam Et etkinken Terminal'den çıkarken ve yeniden başlatırken uygulamaya özel durumu kaydedebilir / geri yükleyebilir.

HISTFILE dosyalarına ve oturumlara özgü olan oturum dosyalarını saklamak için yeni bir klasör (~ / .bash_sessions /) kullanılır.

Kabuk başlatma sırasında oturum dosyası yürütülür. Eski dosyalar periyodik olarak silinir.

Varsayılan davranış, geri yüklenen her terminal oturumu için bash komut geçmişini bağımsız olarak kaydetmeyi ve geri yüklemeyi düzenler. Ayrıca yeni oturumlar için komutları küresel tarihe birleştirir.

Bu davranışı devre dışı bırakabilir ve ayarlayarak tek bir geçmişi paylaşabilirsiniz

export SHELL_SESSION_HISTORY=0

HISTTIMEFORMAT tanımlanmışsa, oturum başına geçmiş varsayılan olarak devre dışı bırakılır (/ private / etc / bashrc_Apple_Terminal)

Aşağıdaki dosya varsa, kaydetme / geri yükleme mekanizması devre dışı bırakılır:

~/.bash_sessions_disable

Apple, El Capitan'ın piyasaya sürülmesinden bu yana bazı davranışları değiştirdi, bu nedenle bu konuda daha fazla bilgi almak daha iyi less /private/etc/bashrc_Apple_Terminal


3
Ancak kaydetme / geri yükleme mekanizmasını devre dışı bırakarak başlamayın. Kabuk komut geçmişinde sorun yaşıyorsanız, bu sorunu çözmeye çalışın. ~/.bash_sessions_disableDosyasını özellikle çözülemeyen bir sorun olduğu durumda son çare olarak tasarlanmıştır. Oturum başına komut geçmişinden daha fazlasını devre dışı bırakır ve yalnızca oturum başına komut geçmişini devre dışı bırakabilirsiniz. Detaylar için içindeki açıklamalara /etc/bashrc_Apple_Terminalbakınız.
Chris Page

1
@ChrisPage Aslında Apple bazı komut dosyalarını değiştirdi. Güncelleme cevap, teşekkürler.
diimdeep

@diimdeep Bu satırı nereye ekleyebilirim? export SHELL_SESSION_HISTORY=0
zerohedge

@zerohedge .bashrcve .bash_profile unix.stackexchange.com/a/310150/15362
diimdeep

@diimdeep Teşekkürler. Bu şu anda çalışıyor gibi görünüyor. Herhangi bir etkisi var mı?
13’de sıfırlama

6

El Capitan güncellemesinden sonra benzer bir şey fark ettim. Dosya .bash_sessions_disabledosyasını ana dizininize eklemek, yeni bash oturumlarını devre dışı bırakır ve .bash_historytekrar kullanılır.

Bu Reddit iş parçacığı daha fazla bilgi ve başka bağlantılar vardır.


Ancak kaydetme / geri yükleme mekanizmasını devre dışı bırakarak başlamayın. Kabuk komut geçmişinde sorun yaşıyorsanız, bu sorunu çözmeye çalışın. ~/.bash_sessions_disableDosyasını özellikle çözülemeyen bir sorun olduğu durumda son çare olarak tasarlanmıştır. Yalnızca oturum başına komut geçmişinden daha fazlasını devre dışı bırakır ve yalnızca oturum başına komut geçmişini devre dışı bırakabilirsiniz. Detaylar için içindeki açıklamalara /etc/bashrc_Apple_Terminalbakınız.
Chris Page

Teşekkürler Chris - Geçmişim son birkaç aydır tarihimin beklendiği gibi (önceki osx sürümüyle ve linux ile aynı) çalışmasını engelliyor. Neden değiştiklerini bilmiyor musunuz?
rabs

@ rabs SHELL_SESSION_HISTORY=0üstüne eklemenizi öneririm ~/.bash_profile.
Teejay

5

RVM problemini, en yeni RVM versiyonuna güncelleyerek veya bunu uygulayarak çözebilirsiniz:

  echo 'shell_session_update' > $HOME/.bash_logout

Daha fazla bilgi için https://github.com/rvm/rvm/issues/3540 adresine bakın .


1
Güzel düzeltme, rvm değiştirmek zorunda kalmadan.
mlo55

1
Ruby Çevre Yöneticisi (RVM) rvm.io hakkında mı konuşuyoruz ? Bu ne zaman ve neden dahil edilmeli?
MarkHu

3

Reddit dizisindeki bu cevap beni kurtardı:

Muhtemelen RVS bash_sessions çalıştırmak için "kanca" çıkışını engelliyor. .Bash_profile dosyasında aşağıdaki satırı yorumlarsanız, çalışması gerekir.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

Bu gerçekten yardımcı oldu!
Karsten

1

Bir Mac ise, sanırım varsayılan giriş kabuğu bashve .profileyerine çalışır ..bashrc . Demek yanlış dosyayı düzenlediniz.


.Profile dosyasını değiştirdim, bu yüzden benim .bashrc ile aynı, ve tarih hala gelmiyor.

@NelsonLiu $HISTFILEFarklı bölgelerinde yankı duyduğunuzda ne olur profile? Belki de değişkeni değiştiren başka bir betiği kaynakladın? Hem kontrol Terminalve iTerm, bash 3ve 4 hem varsayılan var $HOME/.bash_history.
Teoden

profilin farklı kısımlarında $ HISTFILE'ı nasıl eko ederim?

@ NelsonLiu, belli değil mi? Amacınız ne zaman $HISTFILEdeğiştiğini takip etmektir . Böylece, echo $HISTFILEkodunuzu iki basit çevreleyin. Yapmanız gereken şey, bir şey ortaya çıkana kadar her $HISTFILEiki echo $HISTFILEçizgiyi de birbirine yakın veya daha fazla hareket ettirerek değiştirilen kod parçasını bulmaktır . Bu kadar.
Theoden 19

1
bu yüzden senin talimatını verdiğin gibi yaptım ve .bash_profile ile aynı profili oluşturdum. echo $HISTFILEHer çizgide karar verdim , sadece farklılıklar olup olmadığını görmek için. Ancak, sadece /Users/username/.bash_historysayısız kez basılmıştır . Sonra echo $HISTFILEkabuğun içinde koştum ve çıktı /Users/nelsonliu/.bash_sessions/CD275A29-1DF1-4ED8-B8CE-F706B11B812F.historynew.

0

Bu sorunu High Sierra'da görüyordum. Her nasılsa, kendi .bash_history'm root tarafından sahiplenilmişti ve diğer kullanıcılar için okuma izinleri bile yoktu (ana dizinin içeriği ls -al ile görüntülendiğinde)

Bu .bash_history dosyasında hiçbir sonuç yoktu, bu yüzden bir sudo rm .bash_history yaptım ve ardından yeni bir tane yapmak için bir dokunuş.

Şimdi her şey iyi görünüyor


Benim için dosya izinleri değildi, HIST kontrol değişkenlerinin hiçbirini tanımlamamıştım. Görünüşe göre bunlardan biri veya daha fazlası tanımlanmalıdır. Bunu ~/.bash_profileexport HISTTIMEFORMAT='%F %T '
dosyama ekledim
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.