> export foo=1 &
[1] 9016
[1] + done export foo=1
> echo $foo
>
コマンドを実行すると、&
新しいプロセスが作成され、export foo=1
環境変数が親シェルに設定されないことがわかります。しかし、これは可能ですか?
特に、私はNodeやjsコマンドの実行や、gruntやgulpなどの動的完了設定など、多くのパッケージを開発しています。遅すぎます。
似たようなものを作るつもりです。自動環境。ディレクトリに入ると、バックグラウンドでjsコマンドが実行され、設定が完了し、変更すると再実行されますGruntfile.js
。gulpfile.js
それでは、コマンドを非同期的に実行し、コマンドの最後に環境変数と関数を定義するにはどうすればよいですか?
ベストアンサー1
厳密に解釈すれば、自分がやりたいことは不可能だ。それで、問題は、このようなことを達成するためにどれだけ多くの不正行為をしなければならないかということです。 bash、PROMPT_COMMAND、および2つの一時ファイルが必要です。また、バックグラウンド操作が完了するまでコマンドがシェルを更新しないことを受け入れる必要があります。また、必要に応じて長いジョブのみを実行する場合は、バックグラウンドプロセスでmakeを使用することをお勧めします。
まず、イベントフックを設定します。
PROMPT_COMMAND='[[ -e file2 ]] && { . file2; rm file2 }'
その後、バックグラウンドプロセスを閉じます。
(echo export foo=1 > file1 && mv file1 file2 )&
なぜmv
? file2があることは、操作が完了し、ファイルを解析できることを示しているため、file1をゆっくり構築できます。