2

私は現在、NodeJSのプロセス マネージャーである pm2 に取り組んでいます。

Javascript を対象としているため、ES6 という新しい標準が登場します。NodeJS で有効にするには、オプションを追加する必要があります--harmony

bash の部分では、ファイルを実行するインタープリターにユーザーがこのオプションを渡せるようにする必要があります。ウェブをクロールして (そして Stackoverflow で見つけた)、私はこれを見つけました:

#!/bin/sh

':' //; exec "`command -v nodejs || command -v node`" $PM2_NODE_OPTIONS "$0" "$@"

ビンライン

素敵なハックのように見えますが、移植性は十分ですか? CentOS、FreeBSD...

かなり重要なので確認したいと思います。

ありがとうございました

4

2 に答える 2

3

関心のある行を分解してみましょう。

:シェルでは何もしません。

;コマンドセパレータです。

exec現在のプロセスを、実行中のコマンドのプロセスに置き換えます。

"$0"exec コマンドでは、"$@"コマンドのパラメータとして渡されることに注意してください。

これにより、新しいプロセスが で示されるスクリプトを読み取り、$0それをスクリプト入力として使用し、元のパラメーターも読み取ることができるようになります。$@

新しいプロセスは入力スクリプトを最初から読み取り、 のようなコメントを無視します#!/bin/sh。も無視し:ます。

これがトリックです。perl を含むほとんどのインタープリターは、シェルによって無視される構文を使用するか、またはその逆の構文を使用するため、入力ファイルを再読み取りする際に、インタープリターはそれ自体を再度実行しません。

この場合、新しいプロセスは からの行全体を無視しました:。行の残りの部分が無視される理由は? 一部の c のようなインタプリタで//は、コメントです。

あなたの質問に答えるのを忘れていました。はい、ポータブルのようです。まれなケースがあるかもしれませんが、今は思いつきません。

于 2014-01-15T01:17:35.690 に答える
1

NodeJS で有効にするには、オプション --harmony を追加する必要があります。

必ずしも。通常の「#!/usr/bin/env node」シバンを使用できますが、実行時にsetflagsモジュールを使用して調和フラグを設定します。

それがより良い解決策かどうかはわかりませんが、言及する価値はあります。

于 2014-01-15T06:44:36.220 に答える