我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

基本的需求是这样的:在命令行里面设置全局变量,并传递到下一个命令行程序里面。然而在不同的操作系统里面,传递方式存在着本质上的差异。并且这种调用方式,多存在于开源程序里面里面,例如nodejspackage.jsonscripts里面。开源程序的特点决定了,很多网上下载到的代码,到win系统下之后,就无法使用了。

苏南大叔:设置命令行变量时,不同操作系统下的设置方式区别总结 - 变量设置区别
设置命令行变量时,不同操作系统下的设置方式区别总结(图3-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。测试环境:win10/centos/mac

前置内容

本文的内容,可以通过下面的链接加深理解:

结合上一篇内容,以及本文的需求。可以得知:使用&&符合是最佳选择。不过,在win下的时候,使用&也是可以的。

最小测试单元

这里写了一个非常简单的nodejs代码,保存为t.js文件。用于展示“接受和设置”命令行里面用命令设置的环境变量。

console.log(process.env.a + "$");
console.log(process.env.b + "$");
console.log(process.env.NODE_ENV + "$");
process.env.NODE_ENV = 'uncle sunan';          // 设置环境变量
console.log(process.env.NODE_ENV + "$");       // 获取环境变量

接下来的内容,就是重点讨论如何传递这个“命令行里面的环境变量”。

win10

对比如下命令的执行结果:

set a=苏南
set b=sunan
node t.js
set a=苏南 && set b=sunan && node t.js
set a=苏南&&set b=sunan&&node t.js

苏南大叔:设置命令行变量时,不同操作系统下的设置方式区别总结 - win系统执行结果
设置命令行变量时,不同操作系统下的设置方式区别总结(图3-2)

这个图上的运行结果除了展示命令行的使用外,还说明了&&符号之间不应该存在空格,否则得到的结果可能存在偏差。

mac / centos

mac系统下,使用的关键字不是set,而是exportcentos系统下,实际上和mac下表现一致。依然不可以使用set,而是使用export

因此,要对比的命令也变成了:

export a=苏南
export b=sunan
node t.js
export a=苏南&&export b=sunan&&node t.js

省略写法,对比如下命令:

a=苏南 b=sunan node t.js
a=苏南 node t.js

苏南大叔:设置命令行变量时,不同操作系统下的设置方式区别总结 - macos
设置命令行变量时,不同操作系统下的设置方式区别总结(图3-3)

下面这种写法会报错:

export a=苏南 node t.js

组合在一行的时候,export关键词后面除了&&外,最好就别写。

可能的解决方案

所以,按照开源代码的风格,export或者不使用的export的命令,会遗留到win系统下执行。例如在使用npm run命令的时候,就经常会出现下面的类似错误提示信息。

{
  "scripts": {
    "test": "NODE_ENV=development webpack -w"
  },
}
'NODE_ENV' is not recognized as an internal or external command,operable program or batch file.

所以,在win操作系统下的解决方案就是:使用set关键词,并且使用&&操作符来进行命令的串联。

{
  "scripts": {
    "test": "set NODE_ENV=development&&webpack -w"
  },
}

结束语

这里仅仅是个老生常谈的开源代码里面常见的情况,仅仅是做个小小的总结而已。更多编程经验文章。请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   centos