我有一个 bash 脚本,它输出一个整数值以及如何将该值作为变量获取。
var exec = require('child_process').exec;
var ftpsize;
exec('~/docker-project/ftp.check.sh',
function (error, stdout, stderr) {
if (error !== null) {
console.log(error);
} else {
ftpsize=stdout;
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
}
});
console.log('stdout: ' + ftpsize);
标准输出:889951
并且 ftpsize 未定义,如何将标准输出提取为变量。
因为
ftp.check.sh
执行后运行的回调是异步调用的,ftpsize
将是未定义的,因为执行顺序是:
exec
console.log('stdout: ' + ftpsize);
-> 未定义exec
已完成,ftpsize=stdout;
您可能想了解的是 javascript 中“promise”的概念。但是,长话短说,您想要定义一个返回“未来值”的函数,然后您想要“等待”它完成。
async function run() {
return new Promise((resolve, reject) => {
exec('~/docker-project/ftp.check.sh', function (error, stdout, stderr) {
if (error !== null) {
console.log(error);
reject(error)
return
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
resolve(stdout)
})
})
}
然后您可以与
const ftpsize = await run()
或 run().then(ftpsize => { /* ... */ })
一起食用