基本语法//引入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命令操作相关推荐

  1. slqite3库查询数据处理方式_SQLite3命令操作大全

    SQLite3命令操作大全 SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令.本文档提供一个样使用sqlite3的简要说明. 一.ql ...

  2. find命令过滤 no such_运维老手常用的linux命令操作

    运维离不开linux,linux离不开命令操作,熟悉一些好用的linux命令会极大的提升你的工作效率,命令之间灵活的搭配更是会爆发无穷的生产力 1·find命令 一般刚刚接触linux的人可能仅仅只是 ...

  3. Linux 命令操作手册

    文章目录 一.Boot项目前后台 二.进程 三.防火墙 四.查看系统版本 五.权限赋予 六.远程同步文件 七.目录 八.文件 九.解/压缩 十 .大文件分割方案 十一.查看文件中关键词出现的次数 十二 ...

  4. 运维老手常用的linux命令操作

    运维离不开linux,linux离不开命令操作,熟悉一些好用的linux命令会极大的提升你的工作效率,命令之间灵活的搭配更是会爆发无穷的生产力 本文介绍一些好用命令的使用场景,不会详细介绍命令的参数 ...

  5. linux命令操作改变图片大小,如何在Linux命令行中优化和压缩JPEG或PNG图像

    原标题:如何在Linux命令行中优化和压缩JPEG或PNG图像 来自:Linux迷https://www.linuxmi.com/linux-yasuo-jpeg-png.html 您有很多图像,并且 ...

  6. js调用linux命令行,shelljs

    ## [shelljs](https://www.npmjs.com/package/shelljs) `shelljs`模块重新包装了`child_process`,调用系统命令更加简单. `she ...

  7. js调用linux命令,xshell调用js脚本开发

    转载请注明出处:https://blog.csdn.net/xuezoutianya/article/details/81605604 在编写xshell脚本的过程中用到最多的就是自动输入,自动捕获, ...

  8. Linux命令操作,文件复制,删除修改等

    cp命令 该命令的功能是将给出的文件或目录拷贝到另一文件或目录中,同MSDOS下的copy命令一样,功能十分强大. 语法: cp [选项] 源文件或目录 目标文件或目录 说明:该命令把指定的源文件复制 ...

  9. 操作系统篇之Linux命令操作和redis安装以及基本使用

    电脑操作系统 : windows7,8,10,xp,win98操作系统 : linux ax unix以后开发项目是部署在服务器上,服务器一般采用linux.linux的优点:系统稳定,操作速度快,系 ...

最新文章

  1. genesis cam 最新版_触屏精灵下载_触屏精灵最新版下载[其他行业]
  2. hql中常用函數介紹二
  3. 如何快速实现物联网行业中的实名认证
  4. 5月14日 游戏闯关,
  5. L1-003. 个位数统计
  6. Codeforces Round #504 E. Down or Right
  7. python 趣味编程课_青少年编程:Python趣味编程基础入门课程
  8. 收藏 | 深度学习调试经验
  9. Android中各个权限详解
  10. Mysql基础之 事务
  11. 5S管理卫生考评办法
  12. apache配置基于域名访问
  13. 信息学奥赛一本通(c++):1125:矩阵乘法
  14. erlang ets写入mysql_Erlang 进程字典 VS ETS
  15. java 微分方程求解_解微分方程
  16. 我的新版edge插件推荐!!!
  17. nxp的wifi驱动调试
  18. 利用matlab与eeglab对EEG信号(脑电)进行处理分段与保存
  19. 【mySQL】mysql数据库分页查询讨论专题
  20. 前端笔试题及面试题(一)

热门文章

  1. 公司小白熟悉苹果Mac常用简单操作
  2. WPS文档究竟有多好,不服一起跑个分?
  3. linux下的文件搜索功能
  4. 实践一年之久,vivo 如何基于 APISIX 进行业务基础架构的演进
  5. pta——出生年,查验身份证(c语言)
  6. 前端性能测试 WebPagetest功能
  7. Windows环境下查看进程和杀死进程的命令
  8. SpringBoot JDBC Mysql 时区报错 serverTimezone解决方案分析
  9. 代价敏感 数据不均衡_数据质量差的代价
  10. 5.MCScanX 与circos下载、安装、运用