我有一个独特的问题,我需要使用Node迭代几个Unix风格的命令,看看它们是否存在于Windows安装的path
中。
例如,Windows本身不支持ls
。但是,如果有人安装了git
并检查了包含Unix命令,那就会。
我需要知道ls
和其他命令是否在系统path
中。
现在,我正在使用child_process
在每个命令上运行help
。然后我检查运行它的响应。这是混乱和危险的。我不想从Node运行30个任意命令:
var spawnSync = require('child_process').spawnSync;
var out = spawnSync('ls', ['/?'], {encoding: 'utf8'});
我怎样才能检查这些命令是否存在?
答案 0 :(得分:5)
您可以在Linux中使用whereis
,在Windows中使用where
,以查看是否可以找到可执行文件
var isWin = require('os').platform().indexOf('win') > -1;
var where = isWin ? 'where' : 'whereis';
var spawn = require('child_process').spawn;
var out = spawn(where + ' ls', ['/?'], {encoding: 'utf8'});
out.on('close', function (code) {
console.log('exit code : ' + code);
});
答案 1 :(得分:4)
就我个人而言,我发现npm上的command-exists module效果很好。
npm install command-exists
异步
var commandExists = require('command-exists');
commandExists('ls', function(err, commandExists) {
if(commandExists) {
// proceed confidently knowing this command is available
}
});
许
var commandExists = require('command-exists');
// invoked without a callback, it returns a promise
commandExists('ls')
.then(function(command){
// proceed
}).catch(function(){
// command doesn't exist
});
同步
var commandExistsSync = require('command-exists').sync;
// returns true/false; doesn't throw
if (commandExistsSync('ls')) {
// proceed
} else {
// ...
}
答案 2 :(得分:1)
您是否可以检查Path目录,并查看ls命令文件是否存在。
如果文件不存在于目录中,则它不在路径中。
答案 3 :(得分:0)
我认为踢child_process
或使用child_process
的图书馆不是好方法。
最直接的方法是as Matt already answered,只需检查您的路径。
IMO,产生child_process
的效率较低。
对我来说很明显,您可以创建自己的扫描路径实现,但是,如果需要,请使用我的东西。
它旨在成为Go中exec.LookPath
的Node.js端口。
希望有帮助
答案 4 :(得分:0)
此处提供了不同外壳的解决方案:
https://mywiki.wooledge.org/BashFAQ/081
例如对于bash:
# Bash
if hash qwerty 2>/dev/null; then
echo qwerty exists
else
echo qwerty does not exist
fi