shelljs库使用js达到linux命令操作
基本语法//引入shelljsvar shell = require('shelljs')//检查控制台是否以运行`git `开头的命令if (!shell.which('git')) {//在控制台输出内容shell.echo('Sorry, this script requires git');shell.exit(1);}shell.rm('-rf','out/Release');//强制递归删除`out/Release目录`shell.cp('-R','stuff/','out/Release');//将`stuff/`中所有内容拷贝至`out/Release`目录shell.cd('lib');//进入`lib`目录//找出所有的扩展名为js的文件,并遍历进行操作shell.ls('*.js').forEach(function (file) {/* 这是第一个难点:sed流编辑器,建议专题学习,-i表示直接作用源文件 *///将build_version字段替换为'v0.1.2'shell.sed('-i', 'BUILD_VERSION', 'v0.1.2', file);//将包含`REMOVE_THIS_LINE`字符串的行删除shell.sed('-i', /^.*REMOVE_THIS_LINE.*$/, '', file);//将包含`REPLACE_LINE_WITH_MACRO`字符串的行替换为`macro.js`中的内容shell.sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, shell.cat('macro.js'), file);});//返回上一级目录shell.cd('..');//run external tool synchronously//即同步运行外部工具if (shell.exec('git commit -am "Auto-commit"').code !== 0){shell.echo('Error: Git commit failed');shell.exit(1);}复制代码示例解释shell.which(command)在环境变量PATH中寻找指定命令的地址,判断该命令是否可执行,返回该命令的绝对地址echo在控制台输出指定内容.to(index.txt)写入文件exit(code)以退出码为code退出当前进程rm([options,] file [,file ...])删除一个目录中一个或多个文件或目录,一旦删除,无法恢复。常用参数:-f:强制删除文件;-i:删除之前先询问用户;-r:递归处理目录;-v:显示处理过程;shell.rm('-rf', staticSplash);复制代码cp([options,] source_array, dest) cp('-R','index.txt', '~/newCopy/') cp('-R',['index.txt', 'old.txt'], '~/newCopy/')用来将一个或多个源文件或目录复制到指定的文件或目录。常用参数:-f:force (default behavior)-L: follow symlinks-r,-R: recursive-n: no-clobber-u: only copy if source is newer than dest-P: don't follow symlinkscd切换工作目录至指定的相对路径或绝对路径。cd..为返回上一级,cd-回到前一目录。ls用来显示目标列表。常用参数:-a:显示所有文件;-C:多列显示查询结果;-l:单列长格式显示查询结果(与-C相反);-R:递归处理目录;-A:所有文件(包括开头的文件.,除了.和..)-d:列出目录本身,而不是其内容ls(path.join('bundle', 'css/')).forEach(cssName => {***})复制代码sed([options,] search_regex, replacement, file_array将file_array中符合search_regex的内容替换为replacement,支持正则的捕获组自引用。一次处理一行内容,处理完成后把缓冲区内容送往屏幕,然后处理下一行,循环直至结束。常用参数:-i:直接作用源文件cat([options,] file [, file ...])将一个或多个文件内容读入,指定一个文件时读入该文件,指定多个文件时将内容连接在一起读入。可用选项:-n: number all output linesexec(command [, options] [, callback])执行所传入的命令async:是否异步执行,默认false,传入callback时自动开启slient:不输出信息到console,默认falseencoding:默认utf8除非另有说明,否则command 同步执行给定的给定。在同步 模式下,它返回一个ShellString(与ShellJS v0.6.x兼容,返回 表单的对象{ code:..., stdout:... , stderr:... })。否则,这将返回子进程 对象,并callback获取参数(code, stdout, stderr)。注意:对于长期存在的进程,最好以exec()异步方式运行chmod设置文件调用权限-c:output a diagnostic for every file processed-v: like verbose, but report only when a change is made-R: change files and directories recursivelyu表示该文件拥有者,g表示同一群体者,o表示其他,a表示所有+表示增加权限,-表示取消权限,=表示唯一设定权限r表示可读,w表示可写,x表示可执行,X表示当该文件是个子目录chmod(755, '/Users/brandon');chmod('755', '/Users/brandon'); // same as abovechmod('u+x', '/Users/brandon');chmod('-R', 'a-w', '/Users/brandon');复制代码pushd([options,] [dir |'-N'|'+ N'])可用选项-n:在向堆栈添加目录时禁止正常更改目录,以便仅操作堆栈参数dir:使当前工作目录成为堆栈的顶部,然后执行等效的cd dir+N:通过旋转堆栈将第N个目录(从dirs打印的列表的左侧开始,从零开始)到列表的顶部-N:通过旋转堆栈将第N个目录(从dirs打印的列表右侧开始,从零开始计数)到列表顶部echo(process.cwd()); // 当前文件父路径 /Users...pushd('/etc') // /private/etc /Users...pushd('+1') // users... /private/etc 复制代码将当前目录保存在目录堆栈的顶部,然后cd到dir。没有参数,pushd交换前两个目录。返回堆栈中的路径数组。popd([options,] [' - N'|'+ N'])可用选项:-n:从堆栈中删除目录时禁止正常更改目录,以便仅操作堆栈参数:+N:删除第N个目录(从dirs打印的列表左侧开始计算),从零开始-N:删除第N个目录(从dirs打印的列表右侧开始计算),从零开始。echo(process.cwd()); // '/usr'pushd('/etc'); // '/etc /usr'echo(process.cwd()); // '/etc'popd(); // '/usr'echo(process.cwd()); // '/usr'复制代码如果没有给出参数,popd将从堆栈中删除顶级目录并执行cd到新的顶级目录。从dirs列出的第一个目录开始,元素从0开始编号; 即,popd相当于popd +0。返回堆栈中的路径数组dirs([options |'+ N'|'-N']可用选项:-c:通过删除所有元素清除目录堆栈参数:+N:显示第N个目录(从没有选项调用时由dirs打印的列表左侧开始计数),从零开始-N:显示第N个目录(从没有选项调用时由dirs打印的列表右侧开始计数),从零开始显示当前记住的目录列表。返回堆栈中的路径数组,如果指定了+ N或-N,则返回单个路径。find(path [,path ...])查找文件console.log(find('../Config/application.js'))复制代码返回path_arraygrep([options,] regex_filter,file [,file ...])不同于fing查找文件,grep用于查找内容可用选项:-v:反转正则表达式的意义并打印不符合条件的行-l:仅打印匹配文件的文件名grep('-v', 'GLOBAL_VARIABLE', '*.js');grep('GLOBAL_VARIABLE', '*.js');复制代码从给定文件中读取输入字符串,并返回一个字符串,其中包含 与给定文件匹配的文件的所有行regex_filterhead([{' - n':},] file [,file ...])读取文件的开头可用选项:-n :显示文件的第一行console.log(head('bundle.js')) console.log(head({'-n':1},'bundle.js')) // 获取第一行复制代码tail([{' - n':},] file [,file ...])读取文件的结尾可用选项: -n :显示文件的最后几行var str = tail({'-n': 1}, 'file*.txt');var str = tail('file1', 'file2');var str = tail(['file1', 'file2']); // same as above复制代码ln([options,] source,dest)创建链接ln('file', 'newlink'); // /Users.../newlinkln('-sf', 'file', 'newlink'); //如果newlink存在,则强制链接?复制代码mkdir([options,] dir [,dir ...])创建文件夹可用选项:-p:完整路径(如有必要,将创建中间目录shell.mkdir('bundle')shell.mkdir('-p', ['bundle', 'js'])复制代码touch([options,] file [,file ...])不同于mkdir创建文件夹,touch创建文件可用选项:-a:仅更改访问时间-c:不要创建任何文件-m:仅更改修改时间-d DATE:指定时间-r FILE:用FILE的时间替代新文件时间mv([options,] source [,source ...],dest')移动可用选项:-f:force(默认行为)-n:no-clobbermv('move', 'target'); // 将move文件移动到target文件夹复制代码PWD()查看当前目录set(选项)设置全局配置变量可用选项:+/-e:出错时退出(config.fatal)+/-v:verbose:show all commands(config.verbose)+/-f:禁用文件名扩展(globbing)set('-e'); // exit upon first errorset('+e'); // this undoes a "set('-e')"复制代码sort([options,] file [,file ...])内容排序可用选项:-r:反转比较结果-n:根据数值比较sort('foo.txt', 'bar.txt');sort('-r', 'foo.txt');复制代码返回文件的内容,逐行排序。排序多个test()文件类型判断可用选项:'-b', 'path':如果path是块设备,则为true'-c', 'path':如果path是字符设备,则为true'-d', 'path':如果path是目录,则为true'-e', 'path':如果路径存在,则为true'-f', 'path':如果path是常规文件,则为true'-L', 'path':如果path是符号链接,则为true'-p', 'path':如果path是管道(FIFO),则为true'-S', 'path':如果path是套接字,则为trueif (!test('-f', path)) continue;复制代码uniq([options,] [input,[output]])可用选项:-i:比较时忽略大小写-c:按出现次数排列前缀-d:仅打印重复的行,每行对应一行ShellString()构造器,将一个字符串转化为Shell字符串,转化后的字符串支持链式调用特殊的shell命令ShellString('hello world')复制代码ShellString.Prototype.to()将shellString输出至指定文件,相当于脚本语言中的>ShellString.Prototype.toEnd()将shellString追加至指定文件,相当于脚本语言中的>>env['VAR_NAME']指向process.envPipes链式调用支持sed,grep,cat,exec,to,toEnd均支持链式调用Configurationconfig.silent sh.config.silentconfig.fatal config.fatalconfig.verbose config.verboseconfig.globOptions config.globOptionsconfig.reset()重置全局 shell.config.reset()
参考链接
shelljs官网文档
转载于:https://juejin.im/post/5cdb76166fb9a032196ef1ff
shelljs库使用js达到linux命令操作相关推荐
- slqite3库查询数据处理方式_SQLite3命令操作大全
SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...
- find命令过滤 no such_运维老手常用的linux命令操作
运维离不开linux,linux离不开命令操作,熟悉一些好用的linux命令会极大的提升你的工作效率,命令之间灵活的搭配更是会爆发无穷的生产力 1·find命令 一般刚刚接触linux的人可能仅仅只是 ...
- Linux 命令操作手册
文章目录 一.Boot项目前后台 二.进程 三.防火墙 四.查看系统版本 五.权限赋予 六.远程同步文件 七.目录 八.文件 九.解/压缩 十 .大文件分割方案 十一.查看文件中关键词出现的次数 十二 ...
- 运维老手常用的linux命令操作
运维离不开linux,linux离不开命令操作,熟悉一些好用的linux命令会极大的提升你的工作效率,命令之间灵活的搭配更是会爆发无穷的生产力 本文介绍一些好用命令的使用场景,不会详细介绍命令的参数 ...
- linux命令操作改变图片大小,如何在Linux命令行中优化和压缩JPEG或PNG图像
原标题:如何在Linux命令行中优化和压缩JPEG或PNG图像 来自:Linux迷https://www.linuxmi.com/linux-yasuo-jpeg-png.html 您有很多图像,并且 ...
- js调用linux命令行,shelljs
## [shelljs](https://www.npmjs.com/package/shelljs) `shelljs`模块重新包装了`child_process`,调用系统命令更加简单. `she ...
- js调用linux命令,xshell调用js脚本开发
转载请注明出处:https://blog.csdn.net/xuezoutianya/article/details/81605604 在编写xshell脚本的过程中用到最多的就是自动输入,自动捕获, ...
- Linux命令操作,文件复制,删除修改等
cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制 ...
- 操作系统篇之Linux命令操作和redis安装以及基本使用
电脑操作系统 : windows7,8,10,xp,win98操作系统 : linux ax unix以后开发项目是部署在服务器上,服务器一般采用linux.linux的优点:系统稳定,操作速度快,系 ...
最新文章
- genesis cam 最新版_触屏精灵下载_触屏精灵最新版下载[其他行业]
- hql中常用函數介紹二
- 如何快速实现物联网行业中的实名认证
- 5月14日 游戏闯关,
- L1-003. 个位数统计
- Codeforces Round #504 E. Down or Right
- python 趣味编程课_青少年编程:Python趣味编程基础入门课程
- 收藏 | 深度学习调试经验
- Android中各个权限详解
- Mysql基础之 事务
- 5S管理卫生考评办法
- apache配置基于域名访问
- 信息学奥赛一本通(c++):1125:矩阵乘法
- erlang ets写入mysql_Erlang 进程字典 VS ETS
- java 微分方程求解_解微分方程
- 我的新版edge插件推荐!!!
- nxp的wifi驱动调试
- 利用matlab与eeglab对EEG信号(脑电)进行处理分段与保存
- 【mySQL】mysql数据库分页查询讨论专题
- 前端笔试题及面试题(一)