ファイルが node.js で実行可能かどうかを確認するにはどうすればよいですか?
多分何かのような
fs.isExecutable(function (isExecutable) {
})
ファイルが node.js で実行可能かどうかを確認するにはどうすればよいですか?
多分何かのような
fs.isExecutable(function (isExecutable) {
})
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 ファイル権限に変換するのに役立ちます。
https://www.npmjs.com/package/executableを見てください.sync() メソッドもあります
executable('bash').then(exec => {
console.log(exec);
//=> true
});
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'))
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'))
これらすべてのチェックを行う必要があります。