Mac'imdeki bash geçmişi neden kurtarılmıyor?


28

Her zaman iş için bash kullandım ve onunla hiçbir zaman sorun yaşamadım. Şimdi, herhangi bir komutu tekrar tarihe kaydetmiyor. Bir pencere terminali açarsam, bazı komutları deneyin, her şey yolunda gitmiş gibi davranır ve ok tuşlarını kullanarak bana geçmişi gösterir. Fakat eğer pencereyi kapatırsam (ve .bash_history dosyasına kaydedilmesi gereken zamandır) ve bir tane daha açarsam, son komutların hiçbir işareti yoktur.

Neyin yanlış gittiğini nasıl öğrenebilirim? Veya boş olan her şeyi yeniden ayarlayın.


Profiliniz veya rc dosyanız olabilir. İçinde ne var?
user14492

1
.Bash_history'nizdeki izinler ve sahipler nelerdir? Benimki 600 ve bana aittir. Ayrıca, $ HIST_FILE içinde ne var?
blm

@ blm İzinler doğru; $ HIST_FILE yazdırarak .bash_sessions öğrendim . Anlaşılan, bir oturumun sonunda, işletim sistemi bu dosyayı geçmiş dosyasına kaydettiğinde sorunlar var. Artık araştırmak istemiyorum, bu yüzden bunu evime koydum .bash_sessions_disableve varsayılan davranışa geri döndüğünü biliyorum
abaini01

Lütfen Apple ile bir hata raporu doldurmayı düşünün: developer.apple.com/bug-reporting
Chris Page

Yanıtlar:


31

Bunu ben yaptım:

.bash_profileDosyaya bir değişken ekleyin

SHELL_SESSION_HISTORY=0

terminali yeniden başlatın ve bundan sonra istediğim gibi çalışıyor. (Terminali kapattıktan sonra komutları kaydetti)

PS ayrıca HISTFILESIZEve HISTSIZEdeğişkenleri de kullanıyorum

HISTSIZE, bash oturumunuz devam ederken geçmiş listesinde bellekte saklanan satır veya komut sayısıdır.

HISTFILESIZE, (a) bir oturumun başlangıç ​​anında geçmiş dosyasında izin verilen satırlar veya komutların sayısıdır ve (b) ileriki oturumlarda kullanmak üzere bash oturumunuzun sonunda geçmiş dosyasında saklanır.


3
Bu hattın eklenmesi El Capitan'da benim için iyi sonuç veriyor, teşekkürler.
Aidan,

2
Teşekkürler! Birinin bilmesi durumunda, bunun da neden işe yaradığını bilmek isterim. (Tarih = 0, cahil benim aklıma tüm tarihin kaybedileceği anlamına gelir, ancak bunun tam tersi bir etkiye sahip olduğu görülür.)
Mike Williamson

@ Sysqa Bazı "ortada" çözümü var mı? "Geri yüklenen her terminal oturumu için bash komut geçmişini bağımsız olarak kaydetme ve geri yükleme" özelliği, bazı programların faydalanabileceği hoş bir özellik gibi görünmektedir. Önceki konfigürasyondan ve ayrıca bir tür konfigürasyona sahip olan yeni olandan faydalanmanın bir yolu var mı?
loco.loop

8

Başlayarak OS X 10.11 El Capitan , sistem yüklenmiş komut /etc/bashrc_Apple_Terminalkurtarmak için Terminali ile koordinatları / için restore her terminal için ayrı komut geçmişlerini geri Resume .

/etc/bashrc_Apple_TerminalTerminal başına komut geçmişini nasıl yönettiğini ve nasıl özelleştireceğinizi açıklama için yorumları okuyun .

Özelleştirirseniz PROMPT_COMMAND, önceki değerle birleştiğinizden emin olun, böylece sistem tarafından sağlanan komutu silmezsiniz:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Benzer bir şey yaptığınızdan emin olduğunuz bir EXITsinyal işleyici trapkurarsanız (ya da önceki değerle nasıl birleşeceğinizi bulamıyorsanız işleyicinizden shell_session_update'i çağırın) - bu biraz karışır).

Kabuktan çıktığınızda, bu kod yeni komutları terminaldeki geçmişine kaydeder ~/.bash_sessions. Herhangi bir sorunla karşılaşıp karşılaşmadığını görmek için, terminali kapatmak yerine kabuktan elle exit(veya Control-D) ile çıkın . İlerleme mesajlarını günlüğe kaydeder. Tamamlanmadıysa veya herhangi bir tür uyarı ya da hata mesajı görüntüleniyorsa, not alın.

Genel olarak, bashrc_Apple_Terminalkullanıcının kendisiyle uyumlu olmayan herhangi bir özelleştirmeyi yapmış gibi görünüyorsa, oturum başına geçmişini tespit etmeye ve devre dışı bırakmaya çalışır. İşe yaramadığını bulmuş olabilirsin. Lütfen Apple ile bir hata raporu doldurmayı düşünün: https://developer.apple.com/bug-reporting/


Özel bir yapılandırma yapmadım, sanırım sorun bu değil. PROMPT_COMMAND'in ne yaptığını açıklayabilir misiniz?
loco.loop

@ loco.loop “Bash'in PROMPT_COMMAND değişkeni ne için?” veya “PROMPT_COMMAND'ı ne için kullanıyorsunuz?” anlamına mı geliyorsunuz /etc/bashrc_Apple_Terminal? İkincisi, sizi ayrıntılı olarak belgelenen koda yönlendiririm. Veya bu konuda başka bir soru-cevap başlatmalısınız.
Chris Page

Ne demek için PROMPT_COMMAND ... @ChrisPage
loco.loop

@ loco.loop Seni Bash belgelerine yönlendiririm ya da bunun hakkında bir soru ve cevap başlatmanı öneririm.
Chris Sayfa

6

Eğer aşağıdaki hattı var olmadığını kontrol edin: Her ihtimale karşı RVM (Yakut Sürüm Yöneticisi) yüklü orada başkaları da vardır ~/.profile, ~/.bashrcya da ~/.bash_profiledosyalar.

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

Muhtemelen RVS bash_sessions çalıştırmak için "kanca" çıkışını engelliyor.

Benim için sorun buydu. Yorum yapmayı dene.

Kaynak: Reddit


3

Mac OS X'in yeni kurulumunda (10.13.6'ya güncellendi), bash komut geçmişi kaydedilmedi. Ayrıca .bashrc veya .bash_profile dosyası yoktu. Bu durumda, sadece boş bir .bashrc dosyası ekleyerek benim için düzeltti.

touch .bashrc

İhtiyacın olan tek şey bu ...


Mojave / 10.14'teki sorunu da çözüyor gibi görünüyor :-)
ssc

3

Yeni kurulmuş bir osx Mojave ile aynı problemi yaşadım. Dosyamı kontrol ettim ~/.bash_historyve şunu gördüm:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Sadece gilm için onu geri boğmak sorunu çözdü. Kullandım:

sudo chown gilm /Users/gilm/.bash_history

ve bu benim sorunumu çözdü.


2

Ayrıca .bash_logoutaşağıdakileri içeren bir dosya da oluşturabilirsiniz :

shell_session_update

GitHub yorumu kaynaklı


Veya bir trap shell_session_update EXITkez el ile yazın ve oturumu kapatın. /etc/bashrc_Apple_TerminalSenaryoda buraya dahil etmek için çok sıkıcı ipuçları var.
MarkHu
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.