node.js - nodeJS "exec"未执行从命令行运行的 "sed"命令

标签 node.js

我不明白为什么我的代码不起作用。

我正在尝试编辑此 yml 文件: apktool.yml

...
versionInfo:
  versionCode: '1'
  versionName: '1.0'

在 Windows 中,此命令行成功将 versionCode 修改为“2”:

sed -i 's/versionCode: \'1\'/versionCode: \'2\'/g' app-debug\\apktool.yml

但是,从同一目录执行,此nodeJS代码无法修改文件:

const {exec} = require('child_process');
const {promisify} = require('util');
const exec_async = promisify(exec);
await exec_async("sed -i 's/versionCode: \'1\'/versionCode: \'2\'/g' app-debug\\apktool.yml")
    .catch(err => {console.log(err)});

没有捕获到任何错误,并且文件没有被修改。我还尝试在命令之前“sleep 5”以确保这不是时间问题。你知道这里出了什么问题吗?

最佳答案

好吧,这真是令人费解,但还是解决了: sed 命令需要包含双引号才能包含单引号,并且 nodeJS exec 参数也应该包含在转义的双引号中。这有效:

await exec_async("sed -i \"s/versionCode: '1'/versionCode: '2'/g\" app-debug\\apktool.yml")

关于node.js - nodeJS "exec"未执行从命令行运行的 "sed"命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56327101/

相关文章:

mysql - 如何从MySQL服务器检索nodejs列表中所有项目的数据?

node.js - 为什么使用 Mongoose 模型而不仅仅是架构/文档?

javascript - 为什么我只得到一个与此模型的关联?

node.js - NodeJS + ExpressJS 等待 2 分钟再发送 .js 文件

node.js - 如何使用带有 where 子句的 json 对象?

node.js - 使用 sequelize 通过相同的两个表之间的单独联结表进行查询

javascript - 子文件夹的 Angular Route 出错

javascript - delete object[element] 不会删除,而是将其设置为 null ....如何删除它而不是使其为 null?

javascript - VSCode Javascript - 获取准确的本地新 Date() 值

javascript - 在 discord.js 中发送文件缓冲区