为什么不能gulp-shell设置环境变量?

时间:2015-04-18 14:08:36

标签: bash gulp gulp-shell

我有以下简单的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成功回显。

使用的软件:

  • gulp 3.8.11
  • gulp-shell 0.4.1
  • Node.js v0.12.2
  • bash版本3.1.20(4)-release(i686-pc-msys)在Windows上
  • bash版本4.3.33(1) - 在Linux上发布(x86_64-unknown-linux-gnu)。

这里有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:4)

Bash只允许在一个bash会话期间存在环境变量。当您键入

export sweet_param=5

只要bash打开,

sweet_param就会存在。关闭你的shell,sweet_param已经消失。

gulp-shell每行接受一个命令,但对于每一行,它会启动另一个bash:open bash>>执行行>>终止bash>>下一个。因此,在你拥有的每一行之后,所有先前设置的参数都消失了。

尝试:

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

看看如果你在一行中执行了所有的执行,那么你的参数将是sta。

要把它写得更漂亮,你可以使用类似的东西:

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

至于Win问题:Git bash仍然没有Unix shell。你应该尝试使用Cygwin或consorts来完成这项工作。