# ShellJS - Unix shell commands for Node.js [![Build Status](https://secure.travis-ci.org/arturadib/shelljs.png)](http://travis-ci.org/arturadib/shelljs)
ShellJS is a portable **(Windows/Linux/OS X)** implementation of Unix shell commands on top of the Node.js API. You can use it to eliminate your shell script's dependency on Unix while still keeping its familiar and powerful commands. You can also install it globally so you can run it from outside Node projects - say goodbye to those gnarly Bash scripts!
The project is [unit-tested](http://travis-ci.org/arturadib/shelljs) and battled-tested in projects like:
+ [PDF.js](http://github.com/mozilla/pdf.js) - Firefox's next-gen PDF reader
+ [Firebug](http://getfirebug.com/) - Firefox's infamous debugger
+ [JSHint](http://jshint.com) - Most popular JavaScript linter
+ [Zepto](http://zeptojs.com) - jQuery-compatible JavaScript library for modern browsers
+ [Yeoman](http://yeoman.io/) - Web application stack and development tool
+ [Deployd.com](http://deployd.com) - Open source PaaS for quick API backend generation
and [many more](https://npmjs.org/browse/depended/shelljs).
## Installing
Via npm:
```bash
$ npm install [-g] shelljs
```
If the global option `-g` is specified, the binary `shjs` will be installed. This makes it possible to
run ShellJS scripts much like any shell script from the command line, i.e. without requiring a `node_modules` folder:
```bash
$ shjs my_script
```
You can also just copy `shell.js` into your project's directory, and `require()` accordingly.
## Examples
### JavaScript
```javascript
require('shelljs/global');
if (!which('git')) {
echo('Sorry, this script requires git');
exit(1);
}
// Copy files to release dir
mkdir('-p', 'out/Release');
cp('-R', 'stuff/*', 'out/Release');
// Replace macros in each .js file
cd('lib');
ls('*.js').forEach(function(file) {
sed('-i', 'BUILD_VERSION', 'v0.1.2', file);
sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
sed('-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat('macro.js'), file);
});
cd('..');
// Run external tool synchronously
if (exec('git commit -am "Auto-commit"').code !== 0) {
echo('Error: Git commit failed');
exit(1);
}
```
### CoffeeScript
```coffeescript
require 'shelljs/global'
if not which 'git'
echo 'Sorry, this script requires git'
exit 1
# Copy files to release dir
mkdir '-p', 'out/Release'
cp '-R', 'stuff/*', 'out/Release'
# Replace macros in each .js file
cd 'lib'
for file in ls '*.js'
sed '-i', 'BUILD_VERSION', 'v0.1.2', file
sed '-i', /.*REMOVE_THIS_LINE.*\n/, '', file
sed '-i', /.*REPLACE_LINE_WITH_MACRO.*\n/, cat 'macro.js', file
cd '..'
# Run external tool synchronously
if (exec 'git commit -am "Auto-commit"').code != 0
echo 'Error: Git commit failed'
exit 1
```
## Global vs. Local
The example above uses the convenience script `shelljs/global` to reduce verbosity. If polluting your global namespace is not desirable, simply require `shelljs`.
Example:
```javascript
var shell = require('shelljs');
shell.echo('hello world');
```
## Make tool
A convenience script `shelljs/make` is also provided to mimic the behavior of a Unix Makefile. In this case all shell objects are global, and command line arguments will cause the script to execute only the corresponding function in the global `target` object. To avoid redundant calls, target functions are executed only once per script.
Example (CoffeeScript):
```coffeescript
require 'shelljs/make'
target.all = ->
target.bundle()
target.docs()
target.bundle = ->
cd __dirname
mkdir 'build'
cd 'lib'
(cat '*.js').to '../build/output.js'
target.docs = ->
cd __dirname
mkdir 'docs'
cd 'lib'
for file in ls '*.js'
text = grep '//@', file # extract special comments
text.replace '//@', '' # remove comment tags
text.to 'docs/my_docs.md'
```
To run the target `all`, call the above script without arguments: `$ node make`. To run the target `docs`: `$ node make docs`, and so on.
<!--
DO NOT MODIFY BEYOND THIS POINT - IT'S AUTOMATICALLY GENERATED
-->
## Command reference
All commands run synchronously, unless otherwise stated.
### cd('dir')
Changes to directory `dir` for the duration of the script
### pwd()
Returns the current directory.
### ls([options ,] path [,path ...])
### ls([options ,] path_array)
Available options:
+ `-R`: recursive
+ `-A`: all files (include files beginning with `.`, except for `.` and `..`)
Examples:
```javascript
ls('projs/*.js');
ls('-R', '/users/me', '/tmp');
ls('-R', ['/users/me', '/tmp']); // same as above
```
Returns array of files in the given path, or in current directory if no path provided.
### find(path [,path ...])
### find(path_array)
Examples:
```javascript
find('src', 'lib');
find(['src', 'lib']); // same as above
find('.').filter(function(file) { return file.match(/\.js$/); });
```
Returns array of all files (however deep) in the given paths.
The main difference from `ls('-R', path)` is that the resulting file names
include the base directories, e.g. `lib/resources/file1` instead of just `file1`.
### cp([options ,] source [,source ...], dest)
### cp([options ,] source_array, dest)
Available options:
+ `-f`: force
+ `-r, -R`: recursive
Examples:
```javascript
cp('file1', 'dir1');
cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp');
cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above
```
Copies files. The wildcard `*` is accepted.
### rm([options ,] file [, file ...])
### rm([options ,] file_array)
Available options:
+ `-f`: force
+ `-r, -R`: recursive
Examples:
```javascript
rm('-rf', '/tmp/*');
rm('some_file.txt', 'another_file.txt');
rm(['some_file.txt', 'another_file.txt']); // same as above
```
Removes files. The wildcard `*` is accepted.
### mv(source [, source ...], dest')
### mv(source_array, dest')
Available options:
+ `f`: force
Examples:
```javascript
mv('-f', 'file', 'dir/');
mv('file1', 'file2', 'dir/');
mv(['file1', 'file2'], 'dir/'); // same as above
```
Moves files. The wildcard `*` is accepted.
### mkdir([options ,] dir [, dir ...])
### mkdir([options ,] dir_array)
Available options:
+ `p`: full path (will create intermediate dirs if necessary)
Examples:
```javascript
mkdir('-p', '/tmp/a/b/c/d', '/tmp/e/f/g');
mkdir('-p', ['/tmp/a/b/c/d', '/tmp/e/f/g']); // same as above
```
Creates directories.
### test(expression)
Available expression primaries:
+ `'-b', 'path'`: true if path is a block device
+ `'-c', 'path'`: true if path is a character device
+ `'-d', 'path'`: true if path is a directory
+ `'-e', 'path'`: true if path exists
+ `'-f', 'path'`: true if path is a regular file
+ `'-L', 'path'`: true if path is a symboilc link
+ `'-p', 'path'`: true if path is a pipe (FIFO)
+ `'-S', 'path'`: true if path is a socket
Examples:
```javascript
if (test('-d', path)) { /* do something with dir */ };
if (!test('-f', path)) continue; // skip if it's a regular file
```
Evaluates expression using the available primaries and returns corresponding value.
### cat(file [, file ...])
### cat(file_array)
Examples:
```javascript
var str = cat('file*.txt');
var str = cat('file1', 'file2');
var str = cat(['file1', 'file2']); // same as above
```
Returns a string containing the given file, or a concatenated string
containing the files if more than one file is given (a new line character is
introduced between each file). Wildcard `*` accepted.
### 'string'.to(file)
Examples:
```javascript
cat('input.txt').to('output.txt');
```
Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as
those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_
### 'string'.toEnd(file)
Examples:
```javascript
cat('input.txt').toEnd('output.txt');
```
Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as
those returned by `cat`, `grep`, etc).
### sed([options ,] search_regex,
没有合适的资源?快使用搜索试试~ 我知道了~
Cordova-iOS 4.0.0
共311个文件
js:64个
h:40个
m:40个
4星 · 超过85%的资源 需积分: 10 11 下载量 148 浏览量
2015-11-06
12:08:01
上传
评论
收藏 1.23MB ZIP 举报
温馨提示
Cordova-iOS 4.0.0版本 iOS-cordova开发必备资源
资源推荐
资源详情
资源评论
收起资源包目录
Cordova-iOS 4.0.0 (311个子文件)
apple_ios_version 990B
apple_osx_version 986B
apple_xcode_version 1KB
autotest 872B
check_reqs.bat 1018B
apple_xcode_version.bat 1012B
apple_ios_version.bat 1008B
apple_osx_version.bat 1008B
version.bat 992B
create.bat 986B
update.bat 986B
build.bat 899B
clean.bat 899B
log.bat 897B
run.bat 889B
iTunes-small.bplist 24KB
utf16.bplist 1KB
sample1.bplist 605B
sample2.bplist 384B
uid.bplist 365B
airplay.bplist 341B
build 1KB
uncrustify.cfg 65KB
check_reqs 1KB
clean 1KB
ios-sim.cmd 18B
create.coffee 1KB
autotest.coffee 910B
test.coffee 790B
debug.coffee 790B
cordova_plist_to_config_xml 4KB
create 2KB
index.css 4KB
diagnose_project 7KB
.gitattributes 1KB
.gitignore 84B
.gitignore 70B
gitignore 53B
.gitignore 5B
CDVPlugin.h 4KB
CDVViewController.h 3KB
CDVAvailability.h 3KB
CDVPluginResult.h 3KB
CDVCommandDelegate.h 2KB
CDVInvokedUrlCommand.h 2KB
CDVLocalStorage.h 2KB
CDVWebViewEngineProtocol.h 2KB
CDVPlugin+Resources.h 2KB
CDVWebViewTest.h 1KB
CDVUIWebViewDelegate.h 1KB
CDVFakeFileManager.h 1KB
CDVCommandDelegateImpl.h 1KB
MainViewController.h 1KB
CDV.h 1KB
CDVCommandQueue.h 1KB
NSDictionary+CordovaPreferences.h 1KB
CDVWhitelist.h 1KB
CDVConfigParser.h 1KB
Bridging-Header.h 1KB
Bridging-Header.h 1KB
AppDelegate.h 1KB
AppDelegate.h 1KB
CDVUserAgentUtil.h 1KB
CDVURLProtocol.h 1KB
CDVJSON_private.h 1KB
CDVAppDelegate.h 1KB
CDVScreenOrientationDelegate.h 1KB
CDVUIWebViewNavigationDelegate.h 1KB
CDVDebug.h 1KB
CDVAvailabilityDeprecated.h 1014B
CDVUIWebViewEngine.h 993B
CDVURLRequestFilter.h 973B
NSMutableArray+QueueAdditions.h 944B
CDVHandleOpenURL.h 934B
CDVGestureHandler.h 912B
CDVTimer.h 909B
CDVSystemSchemes.h 901B
CDVPlugin+Private.h 900B
ViewController.h 890B
index.html 3KB
index.html 2KB
ios-sim 1KB
ios-sim 22B
cordova.js 57KB
q.js 57KB
shell.js 50KB
nopt.js 14KB
create.js 13KB
lib.js 12KB
nopt.js 11KB
bplistParser.js 11KB
build.js 9KB
run.js 9KB
exec.js 9KB
simctl.js 6KB
chmod.js 6KB
exec.js 6KB
versions.js 6KB
cp.js 6KB
check_reqs.js 5KB
共 311 条
- 1
- 2
- 3
- 4
资源评论
- minhuan2016-06-21可以,不错哦
s__e__v__e__n
- 粉丝: 1
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功