grunt-shell 运行 shell 命令

发布于 2020-10-15 12:24:09 字数 4608 浏览 1624 评论 0

一种可以很好的与其他命令行接口工具(CLI)交互的方式。比如,编译Compass compass compile 或者获取当前的git分支 git branch

新手入门

如果你之前没有使用过 grunt ,请一定查阅 Getting Started 指南,因为它可以告诉你怎样去创建一个 gruntfile 以及如何安装和使用grunt插件。一旦你熟悉了这个流程,使用下面的命令安装这个插件:

npm install --save-dev grunt-shell

一旦插件安装成功,你可以在你的 Gruntfile 中加入下面的这段代码来激活它:

grunt.loadNpmTasks('grunt-shell');

Tip: load-grunt-tasks 模块使得它很容易可以加载多个grunt任务。

相关文档

配置示例

grunt.initConfig({
  shell: {                // Task
    listFolders: {            // Target
      options: {            // Options
        stdout: true
      },
      command: 'ls'
    }
  }
});

grunt.loadNpmTasks('grunt-shell');
grunt.registerTask('default', ['shell']);

用法示例

运行命令

创建一个名为test的文件夹。

grunt.initConfig({
  shell: {
    makeDir: {
      command: 'mkdir test'
    }
  }
});

command 属性支持模板属性:

grunt.initConfig({
  testDir: 'test',
  shell: {
    makeDir: {
      command: 'mkdir <%= testDir %>'
    }
  }
});

你也可以使用一个能够返回命令的函数:

grunt.initConfig({
  shell: {
    hello: {
      command: function () {
        return 'echo hello';
      }
    }
  }
});

这个函数也可以接收参数:

shell: {
  hello: {
    command: function (greeting) {
      return 'echo ' + greeting;
    }
  }
}

grunt.loadNpmTasks('grunt-shell');
grunt.registerTask('default', ['shell:hello']);

运行命令并且显示输出结果

在你的终端输出一个目录列表。

grunt.initConfig({
  shell: {
    dirListing: {
      command: 'ls',
      options: {
        stdout: true
      }
    }
  }
});

自定义回调函数

任意处理输出的结果。

function log(err, stdout, stderr, cb) {
  console.log(stdout);
  cb();
}

grunt.initConfig({
  shell: {
    dirListing: {
      command: 'ls',
      options: {
        callback: log
      }
    }
  }
});

Option passed to the .exec() method

在另一个目录中运行一条命令。在这个例子中,我们使用cwd(当前工作目录)选项在一个子文件夹中运行命令。

grunt.initConfig({
  shell: {
    subfolderLs: {
      command: 'ls',
      options: {
        stdout: true,
        execOptions: {
          cwd: 'tasks'
        }
      }
    }
  }
});

多条命令

通过把命令放入一个用&&或者;连接的数组来运行多条命令。&& 意味着只有当之前的命令运行成功后才运行当前命令。你也可以使用&让这些命令同时运行 (通过将最后一个命令以外的所有命令在子shell中运行)。

(译者注:最后一个命令会在当前主shell中运行?)

grunt.initConfig({
  shell: {
    multiple: {
      command: [
        'mkdir test',
        'cd test',
        'ls'
      ].join('&&')
    }
  }
});

配置

command

必需项
类型: String|Function

你想要运行的命令或者一个可以返回命令的函数。支持underscore模板。

Options

stdout

默认值: false
类型: Boolean

在终端中显示标准输出。

stderr

默认值: false
类型: Boolean

在终端中显示标准错误。

stdin

默认值: true
类型: Boolean

将终端的标准输入转发到命令中。

failOnError

默认值: false
类型: Boolean

如果遇到错误则任务失败。如果你指定了一个callback回调函数,此选项失效。

callback(err, stdout, stderr, cb)

默认值: function () {}
类型: Function

使用你自己的回调函数来覆盖默认的callback。

切记在你完成后调用 cb 方法。

execOptions

默认值: undefined
接受值: Object

指定一些要传递给.exec()方法的选项:

  • cwd String 子进程的当前工作目录
  • env Object 环境键值对
  • setsid Boolean
  • encoding String (默认值: 'utf8')
  • timeout Number (默认值: 0)
  • maxBuffer Number (默认值: 200*1024)
  • killSignal String (默认值: 'SIGTERM')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文