从nodejs运行bash命令[重复]

Posted

技术标签:

【中文标题】从nodejs运行bash命令[重复]【英文标题】:Run bash commands from nodejs [duplicate] 【发布时间】:2018-04-03 05:34:56 【问题描述】:

我构建了一个应用程序,我想为这个应用程序制作一个用 nodejs 编写的安装程序。 安装人员应该这样做: - 更新操作系统 - 更改 ip / 主机名 - 安装 nginx、nodejs、node 附加模块(pg、pm2、...)、postgresql - 从 git hub 下载应用程序 - 为配置文件制作导演 - 使用 pm2 运行应用程序

我在互联网上搜索,发现来自 node 的 child_process,我尝试使用它运行 bash 命令,但在“apt-get update”、“apt-get install node”等命令上收到 ENOENT 错误。 似乎 child_process 中的函数仅适用于简单的命令,例如:“ls”、“pwd”。 你对我有什么建议吗? 在 nodejs 中制作应用程序安装程序或使用纯 bash 命令是一个好策略吗? 谢谢你的建议。

【问题讨论】:

child_process 库可用于运行任何外部命令或程序。您问题的最后一部分似乎纯粹是呼吁就构建安装程序的不同方法提出意见,这与堆栈溢出无关。有数百种方法可以编写安装程序。哪种情况最适合任何特定情况并不是绝对的,这取决于情况和您自己的意见。就目前的情况而言,很难弄清楚您实际上在问什么主题问题。 你见过这个吗? ***.com/questions/44647778/… 如果您想询问为什么在尝试运行 bash 命令时会出现 ENOENT 错误,然后重写您的问题以显示您正在使用的代码,并准确描述您返回的错误以及人们可以在哪里出现错误帮助您解决特定的编码问题。这种类型的问题将是堆栈溢出的主题,但不是一个漫无边际的问题,它要求对一堆没有具体细节的事情发表意见。 我解决了这个问题。我将问题作为字符串发送。好方法是发送“sudo”作为主命令和“apt-get”“update” asi 选项。 如果您已经解决了自己的问题,并且该答案可以作为其他人的一般参考,那么您可以在此处编写自己的答案。否则,您可以删除您的问题。请做一个或另一个完成这个问题。 【参考方案1】:

出现错误是因为我将所有 bash 命令作为字符串发送到 spawnSync。正确的做法是

let cmd = spawnSync("sudo", ["apt-get","upgrade"]);

【讨论】:

由于您没有在问题中显示原始代码,因此除了您之外,没有人可以回答这个问题。 (如果您一直在调用产生 shell 的东西,例如 child_process.exec,则单个字符串将是正确的;相比之下,使用 spawn,您将直接调用可执行文件而不涉及 shell——这意味着您重新运行根本不是“bash命令”)。

以上是关于从nodejs运行bash命令[重复]的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 写bash

如何从 NodeJS 运行 CLI 命令? [复制]

从nodejs运行多个Windows命令

nodejs 如何升级到最新版本

从 nodejs 使用 zbarcam

Linux命令行Nodejs [重复]