问题描述
我在Linux上有此命令来获取我的IP地址:
connmanctl services ethernet_00142d000000_cable | sed -n -e '/IPv4 =/s/.*Address=\([^,]*\).*/\1/p'
我想在使用子进程的exec函数中使用它:
const exec = require('child_process').exec;
exec(' connmanctl services ethernet_00142d000000_cable | sed -n -e '/IPv4 =/s/.*Address=\([^,]*\).*/\1/p' ',(error,stdout,stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
我什么也没有,我不知道如何执行带引号的命令。
感谢您的帮助
解决方法
最简单的选择之一是将命令用双引号引起来,但这可能会导致ESlint错误,因为混用了双引号和单引号。
const exec = require('child_process').exec;
exec(" connmanctl services ethernet_00142d000000_cable | sed -n -e '/IPv4 =/s/.*Address=\([^,]*\).*/\1/p' ",(error,stdout,stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});
另一个选择是使用模板文字: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
const exec = require('child_process').exec;
exec(` connmanctl services ethernet_00142d000000_cable | sed -n -e '/IPv4 =/s/.*Address=\([^,]*\).*/\1/p' `,stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});