我不知道为什么我的代码无法正常工作。

我正在尝试编辑此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)});


没有错误被捕获,并且文件没有被修改。我还尝试在命令之前“休眠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/

10-11 08:32