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 相关文章推荐
JS解析XML的实现代码
Nov 12 Javascript
js setattribute批量设置css样式
Nov 26 Javascript
parseInt parseFloat js字符串转换数字
Aug 01 Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
javascript填充默认头像方法
Feb 22 Javascript
vue.js使用3DES加密的方法示例
May 18 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
Sep 17 Javascript
在Express中提供静态文件的实现方法
Oct 17 Javascript
使用JS实现动态时钟
Mar 12 Javascript
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 Javascript
一个简单的网站访问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
珊瑚虫IP库浅析
2007/02/15 PHP
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
js绑定事件this指向发生改变的问题解决方法
2013/04/23 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
webpack3之loader全解析
2017/10/26 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
2019/01/08 jQuery
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
使用Python实现一个栈判断括号是否平衡
2018/08/23 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
python实现爬取百度图片的方法示例
2019/07/06 Python
Python实现元素等待代码实例
2019/11/11 Python
python numpy库np.percentile用法说明
2020/06/08 Python
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
工程地质勘察专业大学生求职信
2013/10/13 职场文书
小学防溺水制度
2014/01/29 职场文书
安全检查管理制度
2014/02/02 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
委托书格式要求
2015/01/28 职场文书
浅析Python实现DFA算法
2021/06/26 Python
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电