Skip to content

rk-wjw/sheller

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1a18e9f · Jan 9, 2015

History

22 Commits
May 21, 2014
Oct 21, 2014
Apr 24, 2014
May 8, 2014
Jan 9, 2015
Jan 9, 2015

Repository files navigation

sheller

Build Status 依赖模块状态 NPM Version 浏览数

sheller一个用于执行本地和远程服务器命令的nodejs模块。可执行本地命令,可连接远程服务器执行远程机的命令,也可以 通过配置顺序执行一系列的命令(本地和远程),像一个shell脚本一样,但这里只需要命令一条条配置出来就行,而且可以依赖前面执行的命令结果,帮你完成一系列任务的自动化处理。

grunt插件 grunt-shelltask


下载安装

npm install sheller

文档

  1. sheller.execLocal 执行本地命令的方法
    • 参数:
      • command [String] 命令字符串
      • cwd [String] 可选,当前路径
      • callback [Function] 可选,回调函数,第一个参数为错误信息,第二个参数为命令结果
  2. sheller.execSingleTask 执行单个命令任务
    • 参数:
      • cfg [Object] 任务配置对象
      • callback [Function] 回调函数,第一个参数为错误信息,第二个参数为命令任务结果数组
    • cfg格式:
    {
        options:{},//参数配置,可选
        task:[] //命令配置,具体参考下方例子
    }
  3. sheller.loadTasks 加载任务配置
    • 参数:config [Object/String] json对象或配置文件路径字符串 flag [Boolean] true/false 默认false merge/cover
    • 配置文件格式:
    module.exports = {
        "options": {
            //......
        },
        "task1": {
            "options": {
                //......
            },
            "task": [
                //......
            ]    
        },
        "task2": {
            //......
        } 
    };
  4. sheller.execTask 执行已加载的任务
    • 参数:
      • arr [Array] 需要执行的任务名数组,按指定数组顺序执行
      • callback [Function] 回调函数,第一个参数为错误信息,第二个参数为命令任务结果数组
  5. sheller.getssh 获得一个ssh远程的连接对象
    • 参数:
      • name [String] 远程连接的名称(自定义),可为空
      • cfg [Object] 远程机信息,包含地址、用户名及密码
    • cfg格式:
    {
        "host" : "",//ip地址
        "username" : "",//用户名
        "password" : "",//密码
        "workPath" : ""//执行路径,可选
    }
    • 连接对象有两个方法:
      • exec: 执行命令,参数command、callback
      • close: 关闭连接
  6. sheller.clear 清除当前已加载的任务和配置。

Usage Examples

var sheller = require('sheller');
//执行本地命令
sheller.execLocal("echo test", function (err, data){
        if(err){
            console.log(err);
        }else{
            console.log(data);//test
        }
    });
//执行单个命令任务
sheller.execSingleTask({
        options: {
            "testParam": "test"
        },
        task: [
            {
                command: "echo [%= testParam %]",
                after: function (data){
                    return data.replace(/(^\s+)|(\s+$)/, '');
                }
            }
        ]
    }, function (err, data){
        if(err){
            console.log(err);
        }else{
            console.log(data);//["test"]
        }
    });
//加载配置文件
sheller.loadTasks("./tasklist.js");
//执行任务
sheller.execTask(["task1"], function (err, data){
        if(err){
            console.log(err);
        }else{
            console.log(data);//result array
        }
    });

配置文件tasklist.js

module.exports = {
    "options": {
        //本地命令执行路径
        // "localWorkPath" : "E://workspace/",
        //远程机
        "rs110" : {
            "host" : "100.100.100.110",
            "username" : "test110",
            "password" : "123456",
            "workPath" : "/data1/nginx/htdocs/online"
        },
        "rs112" : {
            "host" : "100.100.100.112",
            "username" : "test112",
            "password" : "123456"
        },
        "testParam": "test sheller"
    },
    "task1": {
        "options": {
            // "localWorkPath" : "E://workspace/",
            name: "test options"
        },
        "task": [
            {
                "command": "echo test"
            },{
                "id": "test1",
                "command": "echo test1"
            },{
                "command": "echo test2",
                "after": function (data){
                    return {
                        data: data.replace(/(^\s+)|(\s+$)/, ''),
                        status: 1
                    };
                }
            },{
                "command": function (prev){
                    console.log(prev.ret.status == 1);//true
                    console.log(this.getResult("test1"));//test1
                    console.log(this.getResult());//test
                    console.log(this.getResult(2));//test2
                    console.log(this.options.name);//test options
                    console.log(this.task[0].command);//echo test                    
                    console.log(this.task[0].ret);//test
                    return "exit";
                }
            },{
                command: "echo test end",//不会执行,因为上个命令exit退出了
                remote: "rs110"
            }
        ]    
    },
    "task2": {
        "options": {
        
        },
        "task": [
            {
                "command": "cd"
            }
        ]
    } 
};

License

MIT license

About

Perform a series of local and remote commands

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published