节点 - 检查路径中命令的存在

时间:2016-01-22 18:02:47

标签: node.js path command

我有一个独特的问题,我需要使用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'});

我怎样才能检查这些命令是否存在?

5 个答案:

答案 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