设置命令行变量时,不同操作系统下的设置方式区别总结
发布于 作者:苏南大叔 来源:程序如此灵动~基本的需求是这样的:在命令行里面设置全局变量,并传递到下一个命令行程序里面。然而在不同的操作系统里面,传递方式存在着本质上的差异。并且这种调用方式,多存在于开源程序里面里面,例如nodejs
的package.json
的scripts
里面。开源程序的特点决定了,很多网上下载到的代码,到win
系统下之后,就无法使用了。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。测试环境: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
这个图上的运行结果除了展示命令行的使用外,还说明了&&
符号之间不应该存在空格,否则得到的结果可能存在偏差。
mac / centos
mac
系统下,使用的关键字不是set
,而是export
。centos
系统下,实际上和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
下面这种写法会报错:
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"
},
}
结束语
这里仅仅是个老生常谈的开源代码里面常见的情况,仅仅是做个小小的总结而已。更多编程经验文章。请参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。