You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
894 B
37 lines
894 B
'use strict'; |
|
|
|
var fs = require('fs'); |
|
var LRU = require('lru-cache'); |
|
var shebangCommand = require('shebang-command'); |
|
|
|
var shebangCache = new LRU({ max: 50, maxAge: 30 * 1000 }); // Cache just for 30sec |
|
|
|
function readShebang(command) { |
|
var buffer; |
|
var fd; |
|
var shebang; |
|
|
|
// Check if it is in the cache first |
|
if (shebangCache.has(command)) { |
|
return shebangCache.get(command); |
|
} |
|
|
|
// Read the first 150 bytes from the file |
|
buffer = new Buffer(150); |
|
|
|
try { |
|
fd = fs.openSync(command, 'r'); |
|
fs.readSync(fd, buffer, 0, 150, 0); |
|
fs.closeSync(fd); |
|
} catch (e) { /* empty */ } |
|
|
|
// Attempt to extract shebang (null is returned if not a shebang) |
|
shebang = shebangCommand(buffer.toString()); |
|
|
|
// Store the shebang in the cache |
|
shebangCache.set(command, shebang); |
|
|
|
return shebang; |
|
} |
|
|
|
module.exports = readShebang;
|
|
|