Linux 中的 env
命令
env
命令可以用来传递环境变量,而不需要在外部环境(例如当前 Shell 中)设置它们。
假设你想运行一个 Node.js 应用,同时要为它设置名为 USER
的变量。
你可以运行
env USER=flavio node app.js
此时,Node.js 应用可以通过 Node 的 process.env
接口访问 USER
这个环境变量。
你也可以通过附加 -i
参数,清除所有已经设置的环境变量:
env -i node app.js
这种情况下,你有可能得到一个错误提示 env: “node”: 没有那个文件或目录
,这是由于 Shell 用来查找共用命令路径的 PATH
变量已被卸除,导致 node
命令无法找到。
因此你需要把完整的路径传递给 node
程序:
env -i /usr/local/bin/node app.js
我们用带有以下内容的 app.js
文件来试试:
console.log(process.env.NAME)
console.log(process.env.PATH)
你将会看到这样的输出:
undefined
此时你可以传递一个 env 变量:
env -i NAME=flavio node app.js
然后输出会变成:
flavio
undefined
去掉 -i
参数会让 PATH
变量在应用中再次可用:
如果不带参数运行 env
命令,它还可以用来列出所有环境变量:
env
它会返回已设置的环境变量的列表,例如:
HOME=/Users/flavio
LOGNAME=flavio
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
PWD=/Users/flavio
SHELL=/usr/local/bin/fish
你还可以使用 -u
参数,即可让某个变量在你运行的应用中无法访问。例如,下面的命令移除了当前环境中的 HOME
变量:
env -u HOME node app.js