为什么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会让你省略exportenv

 NODE_DEBUG=fs node script.js # Like env; doesn't create an exported NODE_DEBUG NODE_DEBUG=fs node script.js