You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下Node.js执行/dev/stdin报错的问题求助

解决Node.js执行node /dev/stdin管道报错的问题

问题重现

执行以下命令时出现ENOENT错误:

printf 'console.log(1)' | node /dev/stdin

报错信息:

node:fs:453
    return binding.readFileUtf8(path, stringToFlags(options.flag));
                   ^

Error: ENOENT: no such file or directory, open '/proc/2513530/fd/pipe:[611889]'

但Python、tcc执行类似命令可正常运行:

printf 'print("hi")' | python /dev/stdin
printf 'int main(){ puts("111");return 0;}' | tcc -run /dev/stdin

环境:Linux,Node.js v22.5.1

解决方法

方法1:使用node -读取标准输入

Node.js支持用-作为参数,表示直接从标准输入读取代码执行,这是官方推荐的处理管道输入的方式:

printf 'console.log(1)' | node -

方法2:使用进程替换重定向输入

通过Bash的进程替换将输出直接重定向到Node的标准输入:

node < <(printf 'console.log(1)')

原因说明

Node.js处理/dev/stdin时,会尝试解析该符号链接对应的实际文件路径(比如/proc/self/fd/0),但当输入是管道时,这个路径指向的是/proc/[pid]/fd/pipe:[xxx]这类临时管道项,而Node的文件读取机制在处理这种管道文件时,可能因为管道的生命周期或权限问题,无法正确打开对应的路径。

而Python、tcc等工具在处理/dev/stdin时,会直接读取标准输入流的内容,不会尝试解析路径对应的实际文件,因此可以正常运行。node -则是Node专门设计的、直接读取stdin流的方式,避开了路径解析的问题。

内容的提问来源于stack exchange,提问作者AsukaMinato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 13:42:40