あなたがしようとしていることは不可能です。これは、POSIXシステム(Linux、OSXなど)では、子プロセスが親プロセスの環境を変更できないためです。これには、親プロセスの作業ディレクトリと環境変数の変更が含まれます。
あなたはコマンドラインであり、あなたは(あなたの現在のプロセスを、あなたのノードのスクリプトを実行するために行くときbash
、zsh
システムコールを経由してこれを変更することが可能であるスポーンそれ自身の環境を持つ新しいプロセス、現在の環境の通常コピー(何でも) ;しかし、それはこの返信の範囲を超えています)、そのプロセスが完全に分離して行う必要があることをすべて実行できるようにします。サブプロセスが終了すると、制御はシェルのプロセスに戻されます。シェルのプロセスでは、環境は影響を受けていません。
これには多くの理由がありますが、1つは、スクリプトをバックグラウンドで(を介して./foo.js &
)実行し、実行中に作業ディレクトリの変更またはのオーバーライドを開始したことを想像してくださいPATH
。それは悪夢です。
シェルの作業ディレクトリを変更する必要があるアクションを実行する必要がある場合は、シェルで関数を作成する必要があります。たとえば、Bashを実行している場合、これを次のように配置できます~/.bash_profile
。
do_cool_thing() {
cd "/Users"
echo "Hey, I'm in $PWD"
}
そして、このクールなことが実行可能です:
$ pwd
/Users/spike
$ do_cool_thing
Hey, I'm in /Users
$ pwd
/Users
さらに複雑なことを行う必要がある場合は、その関数から常にnodejsスクリプトを呼び出すことができます。
これが、実行しようとしていることを達成できる唯一の方法です。