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