33 lines
		
	
	
		
			740 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			740 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const fs = require('fs');
 | |
| const shebangCommand = require('shebang-command');
 | |
| 
 | |
| function readShebang(command) {
 | |
|     // Read the first 150 bytes from the file
 | |
|     const size = 150;
 | |
|     let buffer;
 | |
| 
 | |
|     if (Buffer.alloc) {
 | |
|         // Node.js v4.5+ / v5.10+
 | |
|         buffer = Buffer.alloc(size);
 | |
|     } else {
 | |
|         // Old Node.js API
 | |
|         buffer = new Buffer(size);
 | |
|         buffer.fill(0); // zero-fill
 | |
|     }
 | |
| 
 | |
|     let fd;
 | |
| 
 | |
|     try {
 | |
|         fd = fs.openSync(command, 'r');
 | |
|         fs.readSync(fd, buffer, 0, size, 0);
 | |
|         fs.closeSync(fd);
 | |
|     } catch (e) { /* Empty */ }
 | |
| 
 | |
|     // Attempt to extract shebang (null is returned if not a shebang)
 | |
|     return shebangCommand(buffer.toString());
 | |
| }
 | |
| 
 | |
| module.exports = readShebang;
 |