为什么NODE_DEBUG = fs环境variables被设置,但不工作?
有关fs
模块的Node.js文档说( https://nodejs.org/api/fs.html#fs_file_system ):
要跟踪原始调用站点,请设置NODE_DEBUG环境variables:
以及一个设置fs
envvariables的例子:
$ env NODE_DEBUG=fs node script.js fs.js:66 throw err; ^ Error: EISDIR, read at rethrow (fs.js:61:21) at maybeCallback (fs.js:79:42) at Object.fs.readFile (fs.js:153:18) at bad (/path/to/script.js:2:17) at Object.<anonymous> (/path/to/script.js:5:1) <etc.>
但是,如果我在命令行中设置了fs
envvariables,或者在脚本中使用了process.env
,则variables已设置但不起作用,不显示任何跟踪:
预先在命令行中:
$ env NODE_DEBUG=fs // set before running a script $ node script.js // doesn't bring the trace
在脚本中:
'use strict'; process.env.NODE_DEBUG = 'fs'; // set it on the second line of a script <...> // script goes here
我这两种情况的结果如下,没有跟踪,虽然NODE_DEBUG = fs被设置:
fs.js:81 throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs ^ Error: EISDIR, read at Error (native)
问题是。 为什么命令行内联variables设置工作:
$ env NODE_DEBUG=fs node script.js
,
但其他设置方式不起作用?
env
运行一个具有特定环境的程序。 如果不通过,则会列出环境variables。 它不能修改其父进程的环境。 要为当前会话设置环境variables,请使用export
:
export NODE_DEBUG=fs node script.js
虽然shell会让你省略export
和env
,
NODE_DEBUG=fs node script.js # Like env; doesn't create an exported NODE_DEBUG NODE_DEBUG=fs node script.js