Bagaimana Anda menjalankan perintah / skrip shell secara otomatis saat memasukkan / membuat direktori pada Snow Leopard?

7

Mohon maaf jika jawabannya jelas, tetapi saya belum dapat menemukannya (mungkin karena saya mencari dengan terminologi yang salah).

Saya menggunakan Mac yang menjalankan Snow Leopard dan saya ingin tahu apakah dimungkinkan untuk menjalankan perintah shell (atau skrip) secara otomatis ketika saya memasukkan / cd ke direktori tersebut.

Contoh untuk menggambarkan pertanyaan saya dengan lebih baik: Saya menggunakan RVM untuk mengelola versi Ruby. Ini menggunakan taktik serupa dengan file .rvmrc proyeknya . File-file ini dijalankan ketika direktori mereka dimasukkan dimasukkan untuk menggunakan versi Ruby yang benar untuk proyek tertentu.

Saya ingin melakukan sesuatu yang serupa untuk menampilkan konten file todo.txt ketika saya memasukkan file yang berisi direktori.

Mark Scholtz
sumber
Masuk seperti di cdsana?
Daniel Beck
Yap "Entering" == "cd-ing"
Mark Scholtz

Jawaban:

8

Tambahkan yang berikut ke Anda ~/.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
}

Mungkin Anda sudah memiliki fungsi yang sama untuk cd- cukup rentangkan yang itu untuk mencetak konten todo.txtjika ada.

Daniel Beck
sumber
1
Ini tidak akan bekerja dengan popddan pushdjika Anda menggunakannya. Ubahlah sesuai dengan itu.
Daniel Beck
Terima kasih banyak atas jawabannya! Saya mencoba menambahkan metode di atas ke ~ / .bash_profile saya, tetapi sepertinya metode cd builtin masih dipanggil daripada metode cd kustom saya. Saya membuat metode pengujian di ~ / .bash_profile saya untuk mengonfirmasi bahwa metode yang ditambahkan ada yang dipanggil dan memang benar.
Mark Scholtz
@Mark dalam kasus itu, sesuatu yang lain memodifikasi Anda cdlagi, seperti yang saya sebutkan di jawaban saya - saya posting hanya setelah mengkonfirmasikannya untuk saya. Temukan cddefinisi Anda saat ini dengan memasukkan shopt -s extdebug ; declare -F cd. Selain itu, Anda perlu sesi shell baru atau memuat secara manual .bash_profilelagi agar perubahan bisa terjadi.
Daniel Beck
1
@ Daniel tampaknya RVM adalah biang keladinya. Output dari menjalankan perintah itu menghasilkan sebagai berikut: "cd 43 / Pengguna /mark /.rvm/scripts/cd". Melihat skrip itu saya dapat melihat bahwa skrip itu melakukan sesuatu sesuai dengan saran Anda (skrip ini juga menjalankan builtin cd "%@"perintah). Jika saya memodifikasi file ~ / .rmvrc saya, saya dapat mematikan fungsionalitas yang kemudian memungkinkan metode cd kustom saya untuk menjalankan, tetapi kemudian saya kehilangan fungsionalitas kustom RVM. Saya harus membaca dokumentasi RMV untuk mencoba dan menemukan apakah saya dapat memanfaatkan kedua fungsi custom cd tersebut.
Mark Scholtz
2
@Daniel Saya memperbaiki masalah dengan membuat file di direktori ~ / .rvm / hooks / saya bernama "after_cd" yang dijalankan oleh RVM sendiri ketika cdfungsinya dipanggil. Jika ada yang tertarik pada bagaimana RVM menangani perubahan direktori, jawaban yang bagus dapat ditemukan oleh pembuatnya di sini
Mark Scholtz