Dizin farkında bash tarihine sahip olmak mümkün mü


2

Bazı dizinlerde bazı komutları kullanan, diğer dizinlerde farklı olan sadece ben değilim. Bir komut dosyasını birden fazla argümanla çalıştırdığım belirli bir dizine girdiğimde, tarihte kolayca kullanılabilir olmasını istiyorum. Bunun yerine, tarih, farklı sekmelerden ve pencerelerden gelen diğer komutların hunder'leri tarafından spam olarak gönderilir ve yeniden çalıştırmak istediğim şeyin tam olarak ne olduğuna ulaşmak zordur.

Bir sunucunuz olduğunu, çok özel bir komut dosyası için kullandığınızı, bu komut dosyasının tonlarca argümanla başlatıldığını hayal edin. -x this -y that/thing/there.conf -d -g -t also -t more - ne zaman o sunucuya girip, betiği kullanmak için birkaç kez basarsın, o da oradadır.

Peki, bunu bir sistemde, tek bir kullanıcı altında yapmanın bir yolu var mı?


Bash kabuğunun kullanımı bir gereklilik midir? ZSH için bir eklenti olduğundan ve bash ile karşılaştırıldığında ek özelliklerini de beğenebilirsiniz.
MaPePeR

Bu eklenti beni değiştirdirebilir, ama bash kullanmaya devam etmek istiyorum, zaten çıldırdı
iScrE4m

Tüm diğer harika zsh özelliklerini okumalısınız ve bu eklenti muhtemelen değişmesi için en az neden olacak;)
MaPePeR

Yanıtlar:


2

Her şeyden önce, sadece harita eşlemek için daha basit olabilir yukarı ve Aşağı düğmeleri history-search-backward ve history-search-forward sırasıyla. itibaren man bash:

   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.
   history-search-backward
          Search backward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.

Bu özellik etkinken, komutunuzun adını yazmaya başlayın ve ardından tuşuna basın. yukarı , yalnızca yazdığınızdan başlayarak geçmişinizden gelen komutlar gösterilir. Bu şekilde, ilgilendiğiniz komutu çok hızlı bir şekilde bulabilirsiniz ve dizine özgü geçmiş dosyaları ile uğraşmanıza gerek kalmaz. Sadece yaz s, sonra yukarı ve sadece ile başlayan komutlar s bulunacak. kullanım fooba ve sadece ile başlayanlar fooba gösterilecek.

Bunu etkinleştirmek için, aşağıdaki satırları telefonunuza ekleyin. ~/.inputrc sunucudaki dosya (terminal emülatörünüze bağlı olarak, biraz farklı bir biçime ihtiyacınız olabilir. İşte eğer bu işe yaramazsa):

"\e[A": history-search-backward
"\e[B": history-search-forward

Bu, evet, her dizin için bir geçmiş dosyası ayarlamak mümkündür. Bu işlevi ~/.profile (senin için değil ~/.bashrc bu dosya kullanılırken varsayılan olarak okunmadığından ssh uzak bir makineye giriş yapmak için):

 setHistFile(){
    targetDirs=("/home/terdon/foo" "/home/terdon/bar")
    for dir in "${targetDirs[@]}"; do
        if [[ "$dir" = "$PWD" ]]; then
            ## Set the history file name
            export HISTFILE="./.bash_history"
            ## clear current history
            history -c
            ## read history from the $HISTFILE
            history -r
            ## Exit the function
            return
        fi
    done
    ## This will be run if the PWD is not in
    ## the targetDirs array
    export HISTFILE="$HOME/.bash_history"
    ## Read the history (in case we are leaving
    ## one of the targetDirs)
    history -r
}

Ve sonra PROMPT_COMMAND değişken (bu, bir kabuk istemi her gösterildiğinde çalıştırılan bir komuttur):

export PROMPT_COMMAND='setHistFile'

Değiştir targetDirs kendi geçmiş dosyalarına sahip olmak istediğiniz dizinlerin listesine.

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.