Snow Leopard'da bir dizine girerken / cd girerken otomatik olarak bir kabuk komutunu / komut dosyasını nasıl çalıştırırsınız?


7

Bunun cevabı açıksa, özür dilerim, fakat henüz bir tane bulamadım (belki de yanlış terminoloji araştırdığım için).

Snow Leopard kullanan bir Mac'tayım ve / cd'yi bu dizine girdiğimde otomatik olarak bir kabuk komutunun (veya bir komut dosyasının) çalıştırılmasının mümkün olup olmadığını bilmek istiyorum.

Sorumu daha iyi açıklamak için bir örnek: Ruby'nin versiyonlarını yönetmek için RVM kullanıyorum . Bu proje .rvmrc dosyaları ile benzer bir taktik kullanır . Bu dosyalar, içerdikleri dizin girildiğinde, söz konusu proje için Ruby'nin doğru sürümünü kullanmak amacıyla çalıştırılır.

Dizin içeren dosyaları girdiğimde todo.txt dosyasının içeriğini görüntülemek için benzer bir şey yapmak istiyorum.


cdOraya giriyormuş gibi mi giriyorsun?
Daniel Beck

Evet "Girme" == "cd-ing"
Mark Scholtz

Yanıtlar:


8

Aşağıdakileri bilgisayarınıza ekleyin ~/.bash_profile:

function cd {
    # actually change the directory with all args passed to the function
    builtin cd "$@"
    # if there's a regular file named "todo.txt"...
    if [ -f "todo.txt" ] ; then
        # display its contents
        cat todo.txt
    fi
}

Zaten benzer bir işleve sahip olabilirsiniz cd- todo.txtvarsa içeriğini basacak şekilde genişletmek için .


1
Bu işe yaramayacak popdve pushdeğer kullanırsan. Bunları uygun şekilde değiştirin.
Daniel Beck

Cevabınız için çok teşekkürler! Yukarıdaki yöntemi ~ / .bash_profile dosyasına eklemeye çalıştım, fakat yerleşik cd yöntemim hala özel cd yöntemim yerine çağrılıyor gibi görünüyor. Orada eklenen metotların çağrıldığını ve aslında onların arandığını onaylamak için ~ / .bash_profile dosyasında bir test metodu oluşturdum.
Mark Scholtz

@Bu durumda, cevabımı belirttiğim gibi, bir şey daha sizi değiştirir cd- Sadece benim için çalışmayı onayladıktan sonra gönderdim. Mevcut cdtanımınızı girerek bulun shopt -s extdebug ; declare -F cd. Ayrıca, .bash_profiledeğişikliklerin gerçekleşmesi için yeni bir kabuk oturumu açmanız veya el ile yeniden yüklemeniz gerekir .
Daniel Beck

1
@Daniel, RVM'nin suçlu olduğu görünüyor. Bu komutu çalıştırmanın sonucu şu şekilde sonuçlandı: "cd 43 /Users/mark/.rvm/scripts/cd". Bu betiğe baktığımda, önerdiğiniz şeylerin satırında bir şeyler yaptığını görebiliyorum (ayrıca builtin cd "%@"komutu da çalıştırıyor ). ~ / .Rmvrc dosyamı değiştirirsem, özel cd yöntemimin çalışmasına izin veren bu işlevi kapatabilirim, ancak RVM'nin özel işlevselliğini kaybederim. Her iki özel cd işlevini de bir şekilde kullanıp kullanamayacağımı keşfetmek için RMV'nin belgelerini okumam gerekecek.
Mark Scholtz

2
@Daniel Ben cdişlev çağrıldığında RVM kendisi tarafından çalıştırılan "after_cd" adlı benim ~ / .rvm / hooks / dizininde bir dosya oluşturarak sorunu düzeltti . RVM'nin dizin değişikliklerini nasıl idare ettiği ile ilgilenen biri varsa, burada
Mark Scholtz
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.