PATH:
usr
/
local
/
lib
/
node_modules
/
pm2
/
node_modules
/
shelljs
/
src
var common = require('./common'); var fs = require('fs'); common.register('head', _head, { canReceivePipe: true, cmdOptions: { 'n': 'numLines', }, }); // Reads |numLines| lines or the entire file, whichever is less. function readSomeLines(file, numLines) { var buf = common.buffer(); var bufLength = buf.length; var bytesRead = bufLength; var pos = 0; var fdr = fs.openSync(file, 'r'); var numLinesRead = 0; var ret = ''; while (bytesRead === bufLength && numLinesRead < numLines) { bytesRead = fs.readSync(fdr, buf, 0, bufLength, pos); var bufStr = buf.toString('utf8', 0, bytesRead); numLinesRead += bufStr.split('\n').length - 1; ret += bufStr; pos += bytesRead; } fs.closeSync(fdr); return ret; } //@ //@ ### head([{'-n': \<num\>},] file [, file ...]) //@ ### head([{'-n': \<num\>},] file_array) //@ //@ Available options: //@ //@ + `-n <num>`: Show the first `<num>` lines of the files //@ //@ Examples: //@ //@ ```javascript //@ var str = head({'-n': 1}, 'file*.txt'); //@ var str = head('file1', 'file2'); //@ var str = head(['file1', 'file2']); // same as above //@ ``` //@ //@ Read the start of a file. function _head(options, files) { var head = []; var pipe = common.readFromPipe(); if (!files && !pipe) common.error('no paths given'); var idx = 1; if (options.numLines === true) { idx = 2; options.numLines = Number(arguments[1]); } else if (options.numLines === false) { options.numLines = 10; } files = [].slice.call(arguments, idx); if (pipe) { files.unshift('-'); } var shouldAppendNewline = false; files.forEach(function (file) { if (file !== '-') { if (!fs.existsSync(file)) { common.error('no such file or directory: ' + file, { continue: true }); return; } else if (common.statFollowLinks(file).isDirectory()) { common.error("error reading '" + file + "': Is a directory", { continue: true, }); return; } } var contents; if (file === '-') { contents = pipe; } else if (options.numLines < 0) { contents = fs.readFileSync(file, 'utf8'); } else { contents = readSomeLines(file, options.numLines); } var lines = contents.split('\n'); var hasTrailingNewline = (lines[lines.length - 1] === ''); if (hasTrailingNewline) { lines.pop(); } shouldAppendNewline = (hasTrailingNewline || options.numLines < lines.length); head = head.concat(lines.slice(0, options.numLines)); }); if (shouldAppendNewline) { head.push(''); // to add a trailing newline once we join } return head.join('\n'); } module.exports = _head;
[-] popd.js
[edit]
[-] ln.js
[edit]
[-] echo.js
[edit]
[-] which.js
[edit]
[-] find.js
[edit]
[-] exec-child.js
[edit]
[-] sed.js
[edit]
[-] cp.js
[edit]
[+]
..
[-] mv.js
[edit]
[-] tail.js
[edit]
[-] cd.js
[edit]
[-] to.js
[edit]
[-] dirs.js
[edit]
[-] cat.js
[edit]
[-] grep.js
[edit]
[-] common.js
[edit]
[-] test.js
[edit]
[-] head.js
[edit]
[-] tempdir.js
[edit]
[-] pushd.js
[edit]
[-] touch.js
[edit]
[-] uniq.js
[edit]
[-] toEnd.js
[edit]
[-] chmod.js
[edit]
[-] mkdir.js
[edit]
[-] error.js
[edit]
[-] ls.js
[edit]
[-] exec.js
[edit]
[-] sort.js
[edit]
[-] rm.js
[edit]
[-] set.js
[edit]
[-] pwd.js
[edit]