JavaScript 用Node.js写Shell脚本[译]


Posted in Javascript onSeptember 20, 2012

访问参数
你可以通过process.argv来访问到命令行参数,它是一个包含下列内容的数组:

[ nodeBinary, script, arg0, arg1, ... ]

也就是说,第一个参数是从process.argv[2]开始的,你可以像下面这样遍历所有的参数:

process.argv.slice(2).forEach(function (fileName) { 
... 
});

如果你想对参数做更复杂的处理,可以看一下Node.js模块nomnom和optimist.下面,我们会多次用到文件系统模块:
var fs = require('fs');

读取一个文本文件
如果你的文件不是很大,你可以将整个文件全部读进内存,放到一个字符串中:
var text = fs.readFileSync(fileName, "utf8");

然后,你可以分割这个文本,一行一行的处理.
text.split(/\r?\n/).forEach(function (line) { 
// ... 
});

对于大的文件,你可以使用流来遍历所有的行.mtomis在Stack Overflow上给了一个解决方案.

写入一个文本文件
你可以通过字符串将完整的内容写入一个文件.

fs.writeFileSync(fileName, str, 'utf8');
或者你也可以以增量的方式把字符串写入到流中.

var out = fs.createWriteStream(fileName, { encoding: "utf8" }); 
out.write(str); 
out.end(); // 目前和destroy()和destroySoon()一样

跨平台考虑

决定行终止符.
解决1:读取一个已存在的文件到字符串中,搜索"\r\n",如果找不到就判定行终止符是"\n".

var EOL = fileContents.indexOf("\r\n") >= 0 ? "\r\n" : "\n";

解决2:检测系统平台.所有的Windows平台都返回"win32",64位系统也是.
var EOL = (process.platform === 'win32' ? '\r\n' : '\n')

处理paths

当处理文件系统路径时可以使用path模块.这样可以确保使用了正确的PATH分隔符(Unix上用"/",Windows上用"\").

var path = require('path'); 
path.join(mydir, "foo");

运行脚本
如果你的shell脚本名为myscript.js,那么你可以这样运行它:

node myscript.js arg1 arg2 ...

在Unix上,你可以在脚本的第一行加上一句代码,告诉操作系统应该拿什么程序来解释这个脚本:

#!/usr/bin/env node

你还必须给脚本赋予可执行的权限:

chmod u+x myscript.js
现在脚本可以独立运行了:

./myscript.js arg1 arg2 ...

其他话题

  • 输出到标准输出(stdout): console.log和浏览器中一样.console是一个全局对象,不是一个模块,也就不需要使用require()导入.
  • 读取标准输入(stdin): process.stdin是一个readable stream.process是一个全局对象.
  • 运行shell命令:通过child_process.exec().
相关文章
  1. Tip: load source from a file in the Node.js shell
  2. Execute code each time the Node.js REPL starts
Javascript 相关文章推荐
JavaScript delete 属性的使用
Oct 08 Javascript
十分钟打造AutoComplete自动完成效果代码
Dec 26 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
node.js中的http.response.end方法使用说明
Dec 14 Javascript
jquery通过ajax加载一段文本内容的方法
Jan 15 Javascript
Angularjs为ng-click事件传递参数
Jun 15 Javascript
Node.js创建HTTP文件服务器的使用示例
May 11 Javascript
angular6的table组件开发的实现示例
Dec 26 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 Javascript
vue Element-ui表格实现树形结构表格
Jun 07 Vue.js
一个简单的网站访问JS计数器 刷新1次加1次访问
Sep 20 #Javascript
javascript分页代码(当前页码居中)
Sep 20 #Javascript
javascript获取作用在元素上面的样式属性代码
Sep 20 #Javascript
一个基于jquery的文本框记数器
Sep 19 #Javascript
html中的input标签的checked属性jquery判断代码
Sep 19 #Javascript
基于jquery打造的百分比动态色彩条插件
Sep 19 #Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 #Javascript
You might like
php curl的深入解析
2013/06/02 PHP
php获取url参数方法总结
2014/11/13 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JavaScript如何获取到导航条中HTTP信息
2017/10/10 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
layui插件表单验证提交触发提交的例子
2019/09/09 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
python实现图片处理和特征提取详解
2017/11/13 Python
Python实现的个人所得税计算器示例
2018/06/01 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
解决pytorch 的state_dict()拷贝问题
2021/03/03 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
介绍一下gcc特性
2012/01/20 面试题
党员一句话承诺大全
2014/03/28 职场文书
药品营销策划方案
2014/06/15 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
公务员个人总结
2015/02/12 职场文书
会计专业求职信范文
2015/03/19 职场文书
节约用电通知
2015/04/25 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
电影雷锋观后感
2015/06/10 职场文书
大学生见习总结报告
2015/06/24 职场文书