【问题标题】:Why can't gulp-shell set environment variables?为什么 gulp-shell 不能设置环境变量?
【发布时间】:2015-04-18 14:08:35
【问题描述】:

我有以下简单的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
  • gulp-shell 0.4.1
  • Node.js v0.12.2
  • Windows 上的 bash 版本 3.1.20(4)-release (i686-pc-msys)
  • Linux 上的 bash 版本 4.3.33(1)-release (x86_64-unknown-linux-gnu)。

这里有什么问题?

谢谢!

【问题讨论】:

    标签: bash gulp gulp-shell


    【解决方案1】:

    Bash 允许环境变量仅在一个 bash 会话期间存在。当你输入

    export sweet_param=5

    sweet_param 只要打开 bash 就存在。关闭你的 shell,sweet_param 就消失了。

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

    试试:

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

    查看如果您将所有执行都放在一行中,您的参数将保持不变。

    为了写得更漂亮,你可以使用类似的东西:

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

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

    【讨论】:

    • 这很有意义!不过,Windows 版 Git Bash 的有趣之处在于,如果我将 export 命令手动输入到控制台中,它就会起作用。
    • 可能是 *gulp-shell" 不使用调用它的环境,而是使用它确定存在的环境。这将是 Windows 命令行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2018-06-27
    相关资源
    最近更新 更多