Yapmaya çalıştığınız şey mümkün değil. Bunun nedeni, bir POSIX sisteminde (Linux, OSX, vb.), Bir alt sürecin bir üst sürecin ortamını değiştirememesidir. Bu, üst sürecin çalışma dizinini ve ortam değişkenlerini değiştirmeyi içerir.
Komut satırındayken ve Düğüm betiğinizi çalıştırmaya gittiğinizde, mevcut işleminiz ( bash
, zsh
ne olursa olsun) kendi ortamına sahip yeni bir işlem oluşturur, tipik olarak mevcut ortamınızın bir kopyası (bunu sistem çağrıları yoluyla değiştirmek mümkündür. ; ancak bu, bu yanıtın kapsamı dışındadır), bu sürecin yapması gereken her şeyi tamamen izole bir şekilde yapmasına izin verir. Alt süreçten çıkıldığında, kontrol, ortamın etkilenmediği kabuğunuzun sürecine geri verilir.
Bunun pek çok nedeni var, ancak birincisi, arka planda (aracılığıyla ./foo.js &
) bir komut dosyası çalıştırdığınızı ve çalışırken, çalışma dizininizi değiştirmeye veya PATH
. Bu bir kabus olur.
Kabuğunuzun çalışma dizininizi değiştirmeyi gerektiren bazı eylemler gerçekleştirmeniz gerekiyorsa, kabuğunuza bir işlev yazmanız gerekir. Örneğin, Bash çalıştırıyorsanız, bunu şunlara koyabilirsiniz ~/.bash_profile
:
do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
ve sonra bu harika şey yapılabilir:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
Ek olarak daha karmaşık şeyler yapmanız gerekiyorsa, nodejs betiğinize her zaman bu işlevden seslenebilirsiniz.
Yapmaya çalıştığınız şeyi başarmanın tek yolu budur.