Saya sudah membaca ini pertanyaan dan jawaban, tetapi tidak berhenti pas masalah saya, bahkan tho itu serupa.
Saya sedang menulis skrip (disebut cpj) yang akan meluncurkan salah satu proyek saya saat ini. Saya memiliki sekitar 5 dari mereka. Saat saya mengetik
$ cpj blah
Saya ingin direktori kerja saat ini berubah ke direktori proyek bla (yang saya simpan dalam $ PROJDIR) dan saya ingin emacsclient untuk membuka file utama untuk proyek itu (yang saya pegang dalam $ MAINFILE).
Pertanyaan yang saya kutip mengatakan bahwa Anda tidak dapat secara langsung mengubah lingkungan shell yang menjalankan skrip, tetapi Anda dapat sumber skrip dan itu akan melakukannya.
Untuk menguji ini saya menulis skrip shell (disebut chcwd) yang memiliki satu baris:
cd $1
Jika, dari baris perintah saya lakukan:
$ . chcwd $PROJDIR
direktori kerja saya saat ini akan berubah sesuai keinginan saya. Sebaliknya, jika dari skrip cpj saya, saya memiliki baris yang sama:
. chcwd $PROJECT
itu tidak akan mengubah direktori kerja shell saat ini. Saya menyadari bahwa saya menjalankan 2 skrip (cpj dan kemudian chcwd), dan dengan demikian membuat 2 shell, tapi saya tidak melihat cara untuk menyelesaikan apa yang saya inginkan. Adakah yang bisa menunjukkan kepada saya bagaimana mencapai tujuan saya?
sumber
Saya memiliki skrip serupa yang ditulis untuk penggunaan pribadi saya. Ada trik yang sangat mudah untuk mencapai perubahan direktori kerja di dalam skrip. Pertama, cukup tulis skrip Anda, in.ex .:
Sekarang mari kita asumsikan skrip ini disebut 'cdto'. Untuk membuatnya berfungsi, Anda harus sumbernya di shell saat ini, apa yang bisa dicapai dengan 'sumber' atau '.' perintah (keduanya sama). Dalam ex .:
Sekarang untuk membuatnya lebih nyaman:
Salin skrip 'cdto' ke direktori 'tempat sampah' di akun Anda (masuk. / Home / johnsmith / bin - buat jika tidak ada). Periksa variabel PATH Anda untuk memastikan direktori 'nampan' disertakan:
echo $ PATH
Jika tidak, edit file profil. Anda dan tambahkan:
Tambahkan alias ke file .bashrc atau .bash_aliases Anda:
alias cdto = '. cdto '
Dan sudah selesai. Setelah login berikutnya atau ketika Anda membuka terminal baru Anda bisa menggunakan in.ex .:
Nikmati :-)
Sebastian Piech
sumber
Trik sederhana untuk melakukan ini:
Sekarang dir berfungsi adalah $ PROYEK.
sumber