Bash tarihine satır ekleme


9

Varsayılan olarak bash satırları ~/.bash_historygeçmişe yükler . Ayrıca yüklenecek özel dosya eklemek mümkün müdür? Sık kullandığım komutları içeren dosyayı enjekte etmek ve yerleşik arama yoluyla bunlara erişmek istiyorum.


2
Genellikle insanlar sık ​​kullanılan komutlar için takma adlar ekler ...
HBruijn

Bu harika. Ama durum böyle değil - Sürekli kullandığım komutlar için takma adlar kullanıyorum, ancak koşullara göre değiştirmek istediğim çok sayıda argümana sahip birçok komutum var.
rgtk

4
Oldukça çılgın ve işe yaramayabilecek bir tür dosya modifikasyonunu iptal etmeniz gerekir. Sadece uzun komutlarınızı argümanları kabul eden bir kabuk betiği yapın ve içine bırakın /usr/local/binya da bir şey
Wesley

Bunları sık kullanırsanız, zaten tarihinizde olmazlar mı?

İşlevler bildirilsin .bashrcmi?
Mark K Cowan

Yanıtlar:


13

alias h='history|grep'Bash profilime yüklendiğinde bunu basit tutuyorum.

Yani benim iş akışım, h commandörneğin:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

" hpssa -stop" Komutunu çalıştırmak istersem ,!226


Bu sadece benim yaklaşımım, ancak belki de geçmiş öğelerini hatırlama şeklinizi değiştirebilirsiniz. Aslında tarih dosyasına veri enjekte etmenin mantıklı olduğunu düşünmüyorum.


güzel hile, bunu çalmak
wim

Geçmişinizde geri arama yapmak için Ctrl-R'nin neler yaptığına bir göz atmak isteyebilirsiniz. Aklını uçurmak için hazırlan ...

2
@CameronKerr Bunun hemen altındaki cevaba bir göz atın ( serverfault.com/a/695115/120438 ) .Bu durumda Ctrl + R kullanmanın dezavantajı size bir kerede ilgili komutları vermesidir. yaklaşım, ilgili tüm komutların bir listesini döndürür.
Jenny D

Bu harika bir hile olsa da, soruyu hiç cevaplamıyor. Bunun en yüksek oyu alan cevabın ne olduğunu anlayamıyorum. Benim kullanımım, çıkış yaptığımda geçmişini kaybetmeye devam eden bir docker resmim var. Komut satırı üzerinden bir geçmiş dosyasını iletebilmemin iyi olacağını düşündümdocker run ...
kumarharsh

@kumar_harsh Lütfen zor.
ewwhite

7

Önceden girilen uzun komutları almak için geçmişte geriye doğru arama yapan Ctrl-R( reverse-search-historyReadline komutu) üzerine çok güveniyordum, ancak şimdi takma adlar ve kabuk komut dosyaları / işlevleri kullanmayı tercih ediyorum. Her neyse, Bash historyyerleşik komutu geçerli geçmişinize özel komutların bir listesini yüklemek için kullanılabilir.

history -r [filename]

Bash man sayfasından:

Geçmiş dosyasının içeriğini okuyun ve geçerli geçmiş listesine ekleyin.

Başlangıç ​​otomasyonu

Ben sadece bu satırı benim son satır olarak ekleyerek otomatik olarak başlatmayı denedim .bashrc. Ancak, yeni bir kabuk başlattığımda özel geçmiş dosyamdaki komutlar kullanılamıyordu. Kabuk geçmişi yalnızca varsayılan yüklenen gibi görünüyor .bash_history: Dosyanın sonra başlangıç dosyaları işlendiğini ve hemen önce istemi etkileşimli kabuk için sunulmuştur. Ne yazık ki, bunu otomatikleştirmenin kolay bir yolu yok gibi görünüyor.


2

@AnthonyGeoghegan'ın gözlemlediği gibi, başlangıç ​​dosyaları işlendikten sonra geçmiş yüklenir. Bu, bir başlangıç ​​dosyasında istenen geçmişi önceden yüklemek için farklı bir yol sunar:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Bu yaklaşımın, özel komutlarınızın birden fazla kopyasının zaman içinde .bash_history'nize eklenmesine neden olabileceğini unutmayın. Özel komutlarınızı yorum satırlarıyla sarabilirsiniz, böylece .bash_history dosyasını doldurmanın bir parçası olarak bunları kolayca bulabilir ve kaldırabilirsiniz (örn. Sed aracılığıyla). Gibi bir şey:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
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.