我正在寻找一种以类似同步的方式在 javascript 中运行 shell 命令的方法。 我目前发现的最好的是
spawnSync
但它会返回意外的空字符串,而命令在 shell 中是正确的。
const foo = spawnSync('git', [
'log',
'--diff-filter=A',
'--format="%cI"',
'--',
`path/to/a/file/in/repo`,
])
.stdout.toString() // -> ''
该命令在 shell 中运行良好
$ git log --diff-filter=A --format="%cI" -- "path/to/a/file/in/repo"
2023-12-07T22:11:50+08:00
您调用了错误的方法,
stout
是一个可读流。您需要向 data
事件添加一个侦听器,该事件从子进程发出输出数据。
const foo = spawnSync('git', [
'log',
'--diff-filter=A',
'--format="%cI"',
'--',
'path/to/a/file/in/repo'
])
foo.stdout.on("data", (data) => {
console.log(data);
});
foo.on("close", (code) => {
console.log(`child process close all stdio with code ${code}`);
});
foo.on("exit", (code) => {
console.log(`child process exited with code ${code}`);
});