0

次の簡単なgulpfile.jsスクリプトがあります。

var gulp = require('gulp');
var shell = require('gulp-shell');

gulp.task('run-me', shell.task([
  'export sweet_param=5',
  'echo $sweet_param'
]));

問題は、$sweet_param変数が出力されないことです。

Git Bash の下で Windows 8.1 で実行すると、次のメッセージで失敗します。

[16:51:06] Starting 'run-me'...
'export' is not recognized as an internal or external command,
operable program or batch file.
[16:51:06] 'run-me' errored after 29 ms
[16:51:06] Error in plugin 'gulp-shell'
Message:
    Command `export sweet_param=5` failed with exit code 1

Linux の場合、タスクはエラーなしで実行されますが、期待値の代わりに空白行が出力されます。

[16:49:32] Starting 'run-me'...

[16:49:32] Finished 'run-me' after 26 ms

両方のオペレーティング システムの bash でタスクからのコマンドを手動で実行すると、5正常にエコーされます。

使用したソフトウェア:

  • がぶ飲み 3.8.11
  • ガルプシェル0.4.1
  • Node.js v0.12.2
  • Windows での bash バージョン 3.1.20(4) リリース (i686-pc-msys)
  • Linux の bash バージョン 4.3.33(1)-release (x86_64-unknown-linux-gnu)。

ここでのキャッチは何ですか?

ありがとうございました!

4

1 に答える 1

4

Bash では、環境変数は 1 つの bash セッション中にのみ存在できます。入力するとき

export sweet_param=5

sweet_parambash が開いている限り存在します。シェルを閉じると、sweet_param.

gulp-shell行ごとにコマンドを実行しますが、行ごとに別の bash を起動します: bash を開く >> 行を実行する >> bash を終了する >> 次に。したがって、そこにあるすべての行の後、以前に設定されたすべてのパラメータがなくなります。

試す:

gulp.task('run-me', shell.task([
   'export sweet_param=5 && echo $sweet_param'
]));

すべての実行が 1 行にある場合、パラメーターが sta になることを確認します。

もう少しきれいに書くには、次のようなものを使用できます。

gulp.task('run-me', shell.task([
   'export sweet_param=5',
   'echo $sweet_param'
].join(' && '));

Win の問題については、Git bash はまだ Unix シェルではありません。それを機能させるには、Cygwin またはコンソートを試す必要があります。

于 2015-04-18T17:46:06.180 に答える