Bash 为什么可以';t吞咽外壳集环境变量?

Bash 为什么可以';t吞咽外壳集环境变量?,bash,gulp,gulp-shell,Bash,Gulp,Gulp Shell,我有以下简单的gulpfile.js脚本: var gulp=require('gulp'); var shell=需要('gulp-shell'); gulp.task('run-me',shell.task([ “导出参数=5”, “echo$sweet_param” ])); 问题是未打印$sweet_param变量 在Git Bash下在Windows 8.1上运行时失败,并显示以下消息: [16:51:06]正在启动“运行我”。。。 “导出”未被识别为内部或外部命令, 可操作的程序或

我有以下简单的
gulpfile.js
脚本:

var gulp=require('gulp');
var shell=需要('gulp-shell');
gulp.task('run-me',shell.task([
“导出参数=5”,
“echo$sweet_param”
]));
问题是未打印
$sweet_param
变量

在Git Bash下在Windows 8.1上运行时失败,并显示以下消息:

[16:51:06]正在启动“运行我”。。。
“导出”未被识别为内部或外部命令,
可操作的程序或批处理文件。
[16:51:06]“运行我”在29毫秒后出错
[16:51:06]插件“gulp shell”中出现错误
信息:
命令'export sweet_param=5'失败,退出代码为1

在Linux的情况下,任务没有错误地执行,但是空白行被打印而不是预期值:

[16:49:32]正在启动“运行我”。。。
[16:49:32]26毫秒后完成“运行我”
如果任务中的命令是在两个操作系统上的bash中手动执行的,
5
将成功回显

使用的软件:

  • 吞咽3.8.11
  • 吞壳0.4.1
  • Node.js v0.12.2
  • bash版本3.1.20(4)-在Windows上发布(i686 pc msys)
  • linux上的bash版本4.3.33(1)-发行版(x86_64-unknown-linux-gnu)
这里有什么问题


谢谢大家!

Bash只允许在一个Bash会话期间存在环境变量。你打字的时候

export sweet_param=5

只要bash打开,
sweet_param
就存在。合上外壳,
sweet_param
就不见了

gulpshell
每行接受一个命令,但对于每一行,它都会启动另一个bash:openbash>>执行行>>终止bash>>下一步。因此,在那里的每一行之后,所有先前设置的参数都将消失

尝试:

要查看是否所有执行都在一行中,您的参数将停止

为了写得更漂亮一点,你可以用这样的东西:

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

至于Win问题:Git bash仍然不是Unix shell。您应该尝试Cygwin或consorts来实现这一点。

Bash只允许环境变量在一次Bash会话期间存在。你打字的时候

export sweet_param=5

只要bash打开,
sweet_param
就存在。合上外壳,
sweet_param
就不见了

gulpshell
每行接受一个命令,但对于每一行,它都会启动另一个bash:openbash>>执行行>>终止bash>>下一步。因此,在那里的每一行之后,所有先前设置的参数都将消失

尝试:

要查看是否所有执行都在一行中,您的参数将停止

为了写得更漂亮一点,你可以用这样的东西:

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

至于Win问题:Git bash仍然不是Unix shell。你应该试试Cygwin或配偶来做这件事。

这很有道理!不过,Git Bash for Windows的有趣之处在于,如果我将其手动输入控制台,
export
命令可以工作“不使用调用它的环境,而是使用确定它存在的环境。这将是Windows命令行。这非常有意义!不过,Git Bash for Windows的有趣之处在于,如果我将其手动输入控制台,
export
命令可以工作。可能是*gulp shell“不使用调用它的环境,而是使用它确定存在的环境。这将是Windows命令行。