grunt-shell Build Status Built with Grunt

运行shell命令

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

新手入门

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

  1. npm install --save-dev grunt-shell

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

  1. grunt.loadNpmTasks('grunt-shell');

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

相关文档

配置示例

  1. grunt.initConfig({
  2. shell: { // Task
  3. listFolders: { // Target
  4. options: { // Options
  5. stdout: true
  6. },
  7. command: 'ls'
  8. }
  9. }
  10. });
  11. grunt.loadNpmTasks('grunt-shell');
  12. grunt.registerTask('default', ['shell']);

用法示例

运行命令

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

  1. grunt.initConfig({
  2. shell: {
  3. makeDir: {
  4. command: 'mkdir test'
  5. }
  6. }
  7. });

command 属性支持模板属性:

  1. grunt.initConfig({
  2. testDir: 'test',
  3. shell: {
  4. makeDir: {
  5. command: 'mkdir <%= testDir %>'
  6. }
  7. }
  8. });

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

  1. grunt.initConfig({
  2. shell: {
  3. hello: {
  4. command: function () {
  5. return 'echo hello';
  6. }
  7. }
  8. }
  9. });

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

  1. shell: {
  2. hello: {
  3. command: function (greeting) {
  4. return 'echo ' + greeting;
  5. }
  6. }
  7. }
  8. grunt.loadNpmTasks('grunt-shell');
  9. grunt.registerTask('default', ['shell:hello']);

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

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

  1. grunt.initConfig({
  2. shell: {
  3. dirListing: {
  4. command: 'ls',
  5. options: {
  6. stdout: true
  7. }
  8. }
  9. }
  10. });

自定义回调函数

任意处理输出的结果。

  1. function log(err, stdout, stderr, cb) {
  2. console.log(stdout);
  3. cb();
  4. }
  5. grunt.initConfig({
  6. shell: {
  7. dirListing: {
  8. command: 'ls',
  9. options: {
  10. callback: log
  11. }
  12. }
  13. }
  14. });

Option passed to the .exec() method

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

  1. grunt.initConfig({
  2. shell: {
  3. subfolderLs: {
  4. command: 'ls',
  5. options: {
  6. stdout: true,
  7. execOptions: {
  8. cwd: 'tasks'
  9. }
  10. }
  11. }
  12. }
  13. });

多条命令

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

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

  1. grunt.initConfig({
  2. shell: {
  3. multiple: {
  4. command: [
  5. 'mkdir test',
  6. 'cd test',
  7. 'ls'
  8. ].join('&&')
  9. }
  10. }
  11. });

配置

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’)

使用许可

MIT © Sindre Sorhus