Apa yang Anda coba lakukan tidak mungkin. Alasan untuk ini adalah karena dalam sistem POSIX (Linux, OSX, dll), proses anak tidak dapat mengubah lingkungan proses induk. Ini termasuk memodifikasi direktori kerja proses induk dan variabel lingkungan.
Ketika Anda berada di baris perintah dan Anda pergi untuk mengeksekusi skrip Node Anda, proses Anda saat ini ( bash
, zsh
apa pun) memunculkan proses baru yang memiliki lingkungannya sendiri, biasanya salinan lingkungan Anda saat ini (dimungkinkan untuk mengubahnya melalui panggilan sistem ; tetapi itu di luar cakupan balasan ini), memungkinkan proses tersebut melakukan apa pun yang perlu dilakukan dalam isolasi penuh. Saat subproses keluar, kontrol dikembalikan ke proses shell Anda, di mana lingkungan tidak terpengaruh.
Ada banyak alasan untuk ini, tetapi untuk satu, bayangkan Anda mengeksekusi skrip di latar belakang (melalui ./foo.js &
) dan saat dijalankan, itu mulai mengubah direktori kerja Anda atau menimpa PATH
. Itu akan menjadi mimpi buruk.
Jika Anda perlu melakukan beberapa tindakan yang mengharuskan mengubah direktori kerja shell Anda, Anda harus menulis fungsi di shell Anda. Misalnya, jika Anda menjalankan Bash, Anda dapat meletakkan ini di ~/.bash_profile
:
do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
dan kemudian hal keren ini bisa dilakukan:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
Jika Anda perlu melakukan hal-hal yang lebih kompleks sebagai tambahan, Anda selalu dapat memanggil skrip nodejs dari fungsi itu.
Ini adalah satu-satunya cara Anda dapat mencapai apa yang Anda coba lakukan.