Saya mencoba untuk mengubah direktori kerja skrip Node.js saya ketika dijalankan dari skrip bin. Saya punya sesuatu seperti berikut:
#!/usr/bin/env node
process.chdir('/Users')
Ketika saya kemudian menjalankan file ini dengan ./bin/nodefile
, itu keluar, tetapi direktori kerja dari konteks shell saat ini tidak berubah. Saya juga mencoba shelljs , tetapi itu juga tidak berhasil.
Apa cara terbaik untuk melakukannya? Saya mengerti ini berfungsi tetapi ini hanya dalam proses terpisah.
javascript
node.js
terminal
command-line-interface
cd
Jonovono
sumber
sumber
Jawaban:
Cara yang benar untuk mengubah direktori sebenarnya dengan
process.chdir(directory)
. Berikut contoh dari dokumentasinya :Ini juga dapat diuji di Node.js REPL:
sumber
Tidak ada metode bawaan untuk Node untuk mengubah CWD dari shell yang mendasari menjalankan proses Node.
Anda dapat mengubah direktori kerja saat ini dari proses Node melalui perintah
process.chdir()
.Ketika proses Node ada, Anda akan menemukan diri Anda kembali ke CWD tempat Anda memulai proses.
sumber
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 menimpaPATH
. 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
:dan kemudian hal keren ini bisa dilakukan:
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.
sumber
Jawaban singkatnya: tidak (mudah?), Tetapi Anda dapat melakukan sesuatu yang sesuai dengan tujuan Anda.
Saya telah melakukan alat serupa (perintah kecil yang, memberikan deskripsi proyek, menetapkan lingkungan, jalur, direktori, dll.). Yang saya lakukan adalah mengatur semuanya dan kemudian menelurkan cangkang dengan:
Setelah eksekusi, Anda akan berada di shell dengan direktori baru (dan, dalam kasus saya, lingkungan). Tentu saja Anda dapat mengubah bash untuk shell apa pun yang Anda inginkan. Perbedaan utama dengan permintaan awal Anda adalah:
Namun, bagi saya, perbedaan itu diinginkan.
sumber