10

ファイルが node.js で実行可能かどうかを確認するにはどうすればよいですか?

多分何かのような

fs.isExecutable(function (isExecutable) {

})
4

6 に答える 6

9

fs.statそのために呼び出しを使用します。

このfs.stat呼び出しはfs.Statsオブジェクトを返します。

そのオブジェクトにはmode属性があります。モードは、ファイルが実行可能かどうかを示します。

私の場合、ファイルを作成して実行chmod 755 test_fileし、次のコードを実行しました。

var fs = require('fs');
test = fs.statSync('test_file');
console.log(test);

私が得たのtest.modeは33261でした。

このリンクmodeは、同等の UNIX ファイル権限に変換するのに役立ちます。

于 2013-04-28T01:28:46.537 に答える
2

https://www.npmjs.com/package/executableを見てください.sync() メソッドもあります

executable('bash').then(exec => {
    console.log(exec);
    //=> true 
});
于 2016-02-05T23:50:36.077 に答える
1

fs.stat名前付きビットマスクモードチェックfs.constants.S_IXUSR

https://stackoverflow.com/a/16258627/895245が書かれて以来、Node.js はそれらを追加したようです。

const fs = require('fs');

function isExec(p) {
  return !!(fs.statSync(p).mode & fs.constants.S_IXUSR)
}

console.log(isExec('/usr/bin/ls'))
console.log(isExec('/dev/random'))

もちろん、これは、https://nodejs.org/docs/latest-v17.xで文書化されているように 3 つの定数があるため、実際の「このファイル チェックを実行できますか」を実行するのが少し難しいという事実を強調しています。 /api/fs.html#file-mode-constants :

  • fs.constants.S_IXUSR: ユーザー
  • fs.constants.S_IXGRP: グループ
  • fs.constants.S_IXOTH: 他の

に従って:

man 2 chmod

したがって、完全なチェックでstatは、ファイルの所有者と一致するかどうか、またはグループの一員であるかどうかを確認する必要があります。

したがって、 https : //stackoverflow.com/a/41929624/895245fs.accessSyncで述べたように、面倒な raise API を使用する方がよいでしょう。

const fs = require('fs');

function isExec(p) {
  try {
    fs.accessSync(p, fs.constants.X_OK)
    return true
  } catch (e) {
    return false
  }
}

console.log(isExec('/usr/bin/ls'))
console.log(isExec('/dev/random'))

これらすべてのチェックを行う必要があります。

于 2021-11-09T12:03:10.577 に答える