| '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; |