为什么不能gulp-shell设置环境变量?
Why can't gulp-shell set environment variables?
我有以下简单的 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
变量没有打印出来。
当 运行 on Windows 8.1 under Git Bash 它失败并显示消息:
[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 Windows
版本 3.1.20(4)-release (i686-pc-msys)
- bash 版本 4.3.33(1)-发布 (x86_64-unknown-linux-gnu) Linux.
这里有什么问题?
谢谢!
Bash 允许环境变量仅在一个 bash 会话期间存在。当你输入
export sweet_param=5
只要 bash 打开,sweet_param
就存在。关闭你的 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的问题:Gitbash还是没有Unixshell。您应该尝试使用 Cygwin 或 consorts 来完成这项工作。
我有以下简单的 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
变量没有打印出来。
当 运行 on Windows 8.1 under Git Bash 它失败并显示消息:
[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 Windows 版本 3.1.20(4)-release (i686-pc-msys)
- bash 版本 4.3.33(1)-发布 (x86_64-unknown-linux-gnu) Linux.
这里有什么问题?
谢谢!
Bash 允许环境变量仅在一个 bash 会话期间存在。当你输入
export sweet_param=5
sweet_param
就存在。关闭你的 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的问题:Gitbash还是没有Unixshell。您应该尝试使用 Cygwin 或 consorts 来完成这项工作。