无法创建 /dev/stdout:没有这样的设备或地址

2023-12-10

我想通过节点运行 shell 命令并捕获标准输出的结果。我的脚本在 OSX 上运行良好,但在 Ubuntu 上不行。

我已将问题和脚本简化为以下节点脚本:

var execSync = require('child_process').execSync,
    result = execSync('echo "hello world" >> /dev/stdout');

// Do something with result

结果是:

/bin/sh: 1: 无法创建 /dev/stdout: 没有这样的设备或地址

  • 我尝试过更换/dev/stdout with /dev/fd/1
  • 我尝试过将 shell 更改为 bash...execSync('echo ...', {shell : '/bin/bash'})

就像我说的,上面的问题被简化了。真正的脚本接受应写入结果的文件名作为参数,因此我需要通过提供对 stdout 流作为文件描述符的访问来解决此问题,即/dev/stdout.

如何通过节点执行命令,同时授予命令访问权限its own标准输出流?


On /dev/stdout

我无法访问 OSX 盒子,但是从这个问题 on phantomjs,似乎在 OSX/BSD 和 Linux 上/dev/stdout是一个符号链接,尽管如此,它们之间的工作方式似乎有所不同。一位评论者表示这是 OSX 上使用的标准/dev/stdout但不适用于Linux。在另一个随机的地方我读到的陈述暗示/dev/stdout几乎是 OSX 的事情。或许有线索在这个答案中至于为什么它在Linux上不起作用(似乎以这种方式使用时隐式关闭文件描述符)。

更多相关问题:

  • https://unix.stackexchange.com/questions/36403/portability-of-dev-stdout
  • bash 重定向到 /dev/stdout:不是目录

解决方案

我在 Arch 上尝试了你的代码,它确实给了我同样的错误,就像提到的变体一样 - 所以这与 Ubuntu 无关。

我找到了一个博客文章描述了如何将文件描述符传递给execSync。将其与我从中得到的内容结合起来here and here,我写了你的代码的修改版本:

var fs = require('fs');
var path = require('path');

var fdout = fs.openSync(path.join(process.cwd(), 'stdout.txt'), 'a');
var fderr = fs.openSync(path.join(process.cwd(), 'stderr.txt'), 'a');

var execSync = require('child_process').execSync,
    result = execSync('echo "hello world"', {stdio: [0,fdout,fderr] });

除非我误解了你的问题,否则你希望能够更改命令输出的位置execSync去。有了这个,您可以使用文件描述符。你仍然可以通过1 and 2如果你想让被调用的程序输出到stdout and stderr由其父级继承,您已经在评论中提到过。

为了将来的参考,这适用于带有内核版本的 Arch4.10.9-1-ARCH, on bash 4.4.12 and node v7.7.3.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法创建 /dev/stdout:没有这样的设备或地址 的相关文章

随机推荐

  • 仅删除某些请求的安全性 wso2 api 管理器

    是否可以使用 WSO2 API 管理器版本 3 删除我的 api 列表中某些特定请求的安全性 例如 我有以下请求 customer post products get customer address get 就我而言 我不需要安全 pro
  • 如何使用 Stripes Framework 在 Web 浏览器中显示 JFreeChart

    情况是这样的 我的 metrics jsp 页面提交了创建图表所需的几个变量 ProjectActionBean java 调用一些其他创建 JFreeChart 的 java 类 我可以在弹出窗口中显示图表 但我希望它显示在原始浏览器窗口
  • 如何在不设置顶部和底部的情况下设置左右CSS属性

    有什么办法可以只设置左右 边距 填充 边框宽度等 为相同的值根本不需要设置顶部和底部 用一种表达方式 而不是 my class name margin left 2px margin right 2px 对于属性 如果我希望左侧和右侧具有相
  • 在 Linux CentOS 6.3 上安装 R 时出现问题

    在 Linux CentOS 6 3 上安装 R 时 我得到以下信息 Error Package R core 3 0 1 2 el6 x86 64 epel Requires libjpeg so 62 LIBJPEG 6 2 64bit
  • 如何在 Vaadin 10 组合框中添加语言标志

    如何在 Vaadin 10 Como 框中添加语言标志 您可以使用comboBox setRenderer 构建您自己的将要使用的布局 comboBox setRenderer new ComponentRenderer
  • 具有相同簇大小的 K 均值算法变体

    我正在寻找最快的算法 用于按距离将地图上的点分组为大小相等的组 这k 均值聚类算法看起来简单且有前途 但不能产生同等规模的群体 该算法是否有一种变体 或者是否有一种不同的算法可以允许所有集群的成员数量相等 也可以看看 将 n 个点分组到 k
  • MongoDB 无法确定表达式错误的序列化信息

    我的数据具有以下结构 public enum ParamType Integer 1 String 2 Boolean 3 Double 4 public class Gateway public int id get set public
  • 清除Android的本地通知cordova插件

    I use 适用于 Android 的 Phonegap 本地通知插件显示特定日期的通知 我使用 Cordova 2 2 我使用 cordova 的升级教程修改插件 显示通知 但当我单击它时 应用程序未打开且通知未清除 我怎样才能解决这个问
  • 动态改变自定义seekBar的LinearGradient颜色比率

    我创建了一个带有自定义的搜索栏LinearGradient可绘制的 但是 我希望能够更改每种颜色的渐变比例 这里我使用 3 种颜色 如果满足以下条件 它们会均匀分布positions is null 事实上 我想要的是为每种颜色提供宽度或比
  • 如何从 weblogic 12.2.1 禁用 Jersey

    Weblogic 12 2 1内部有Jersey 2 21 1作为JAX RS 2 0的实现 但我们想使用Jersey 2 5 1或最新版本的Jersey 解决冲突的一般方法是在配置文件中定义类以从应用程序加载类 但是当你升级weblogi
  • 类模板的别名

    考虑一个别名模板 例如A在下面的代码中 现在让B是以下的别名模板A 在下面的代码中 这些类模板用作结构的模板参数C它仅专门用于一种类型名称 A clang std c 11存在于error implicit instantiation of
  • BOM 随机出现在 JSON 回复中

    我正在使用 JSON 和 cURL 实现两个服务器之间的通信 问题是 有时 JSON 回复中的开括号之前会附加 BOM 字节顺序标记 我已经设法修剪它并成功解析 JSON 字符串 但考虑到 JSON 是由我自己的代码生成的 我不知道该 BO
  • 在R中,如何在将对象发送到函数后获取对象的名称?

    我正在寻找相反的get 给定一个对象名称 我希望直接从该对象中提取代表该对象的字符串 简单的例子foo是我正在寻找的函数的占位符 z lt data frame x 1 10 y 1 10 test lt function a mean x
  • 收到 org.postgresql.util.PGobject 类型的对象

    我可以从代码中将几何数据插入数据库 但只能使用 SQL 编辑器 例如 PGAdmin III 查询数据 我无法将几何数据检索回我的代码 每次尝试都会以 已接收类型为 org postgresql util PGobject 的对象 结束 即
  • 如何在 iOS 中以编程方式添加 UITabBarItem 的标识符类型?

    我想在 iOS 中以编程方式添加 UITabBarItem 在界面生成器中 我们可以轻松选择搜索 收藏夹 最近选项卡等标识符 我想知道如何以编程方式添加这些标识符类型 您将其添加为 UIViewController 属性吗 你创建一个UIT
  • 如何捕获 ASP.NET 应用程序中未处理的异常?

    在一次 NET考试中我遇到了这个问题 您可以使用以下哪项来捕获应用程序中未处理的异常 服务器错误 页面错误 应用程序错误 响应错误 错误事件 我知道它的Application Error 但我想知道的是其他的是什么 通过一些谷歌搜索 我发现
  • 无法从我自己的 angularjs api 获取 JSONP 数据

    我正在尝试从我自己的 api 获取数据 但无法成功将数据获取到 vegdata 变量 这是控制器代码 scope filterText null scope vegdata scope init function url http 192
  • WPF TreeView 数据绑定以隐藏/显示展开/折叠图标

    我实现了一个 WPF 按需加载树视图 如中所述this 非常好的 文章 在上述解决方案中 使用虚拟元素来保留展开 图标 树视图项目行为 当用户单击扩展器时 虚拟项目将替换为真实数据 我想通过添加属性来完善模型public bool HasC
  • 哪些 Swing 组件方法是线程安全的?

    根据摇摆教程 一些 Swing 组件方法在 API 规范中被标记为 线程安全 这些可以从任何线程安全地调用 所有其他 Swing 组件方法都必须从事件分派线程调用 忽略此规则的程序可能在大多数情况下都能正常运行 但会出现难以重现的不可预测的
  • 无法创建 /dev/stdout:没有这样的设备或地址

    我想通过节点运行 shell 命令并捕获标准输出的结果 我的脚本在 OSX 上运行良好 但在 Ubuntu 上不行 我已将问题和脚本简化为以下节点脚本 var execSync require child process execSync