sheller一个用于执行本地和远程服务器命令的nodejs模块。可执行本地命令,可连接远程服务器执行远程机的命令,也可以 通过配置顺序执行一系列的命令(本地和远程),像一个shell脚本一样,但这里只需要命令一条条配置出来就行,而且可以依赖前面执行的命令结果,帮你完成一系列任务的自动化处理。
grunt插件 grunt-shelltask
npm install sheller
sheller.execLocal
执行本地命令的方法- 参数:
- command [String] 命令字符串
- cwd [String] 可选,当前路径
- callback [Function] 可选,回调函数,第一个参数为错误信息,第二个参数为命令结果
- 参数:
sheller.execSingleTask
执行单个命令任务- 参数:
- cfg [Object] 任务配置对象
- callback [Function] 回调函数,第一个参数为错误信息,第二个参数为命令任务结果数组
- cfg格式:
{ options:{},//参数配置,可选 task:[] //命令配置,具体参考下方例子 }
- 参数:
sheller.loadTasks
加载任务配置- 参数:config [Object/String] json对象或配置文件路径字符串 flag [Boolean] true/false 默认false merge/cover
- 配置文件格式:
module.exports = { "options": { //...... }, "task1": { "options": { //...... }, "task": [ //...... ] }, "task2": { //...... } };
sheller.execTask
执行已加载的任务- 参数:
- arr [Array] 需要执行的任务名数组,按指定数组顺序执行
- callback [Function] 回调函数,第一个参数为错误信息,第二个参数为命令任务结果数组
- 参数:
sheller.getssh
获得一个ssh远程的连接对象- 参数:
- name [String] 远程连接的名称(自定义),可为空
- cfg [Object] 远程机信息,包含地址、用户名及密码
- cfg格式:
{ "host" : "",//ip地址 "username" : "",//用户名 "password" : "",//密码 "workPath" : ""//执行路径,可选 }
- 连接对象有两个方法:
- exec: 执行命令,参数command、callback
- close: 关闭连接
- 参数:
sheller.clear
清除当前已加载的任务和配置。
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"
}
]
}
};
MIT license