ShellJS是一个便携式(Windows / Linux / MacoS)实现UNIX shellCommands在Node.js API的顶部。您可以使用它来消除您的shellscript'依赖于Unix,同时仍然保持其熟悉和强大的流样。您还可以在全球范围内安装它,以便您可以从NodeProject外部运行它 - 向那些GNARLY BASH脚本说再见!
如果您有反馈,建议或需要帮助,请随时在我们的IssueTracker中发布。
从旧版本升级?查看我们的BreakingChanges页面以查看升级时要注意的更改。
如果您只想要Cross Platform UNIX命令,请结帐我们的新项目shelljs / shx,一个实用程序露出shelljs tothe命令行。
ShellJS现在支持第三方插件!您可以了解更多有关使用Pluginsand在TheWiki中编写自己的shelljs命令的信息。
有关所有最新功能的文档,请查看我们的自述文件。要读取包含最新版本的文档,请查看NPMPage或shelljs.org。
var shell =要求(' shelljs');如果(!shell。哪(' git')){shell。回声('抱歉,此脚本需要Git');壳 。出口(1); } //复制文件以释放dir shell。 RM(' -RF',' OUT /释放');壳 。 CP(' -R','东西/'' OUT /释放'); //在每个.js文件shell中替换宏。 CD(' lib');壳 。 LS(' *。JS')。 foreach(函数(文件){shell。sed(' -i'' build_version',' v0.1.2',文件); shell。sed(& #39; -i',/ ^。* remove_this_line。* $ /,''文件); shell。shell。sed(' -i' /。* replace_line_with_macro。 * \ n /,shell。cat(' macro.js'),文件);});壳 。 CD(''); //如果(shell。exec(' git comment -am"自动提交"')同步运行外部工具。代码!== 0){shell。回声('错误:git提交失败');壳 。出口(1); }
如果您需要通过一个看起来选项的参数,您可以这样做:
壳 。 grep(' - ',' -v','路径/文件'); //搜索" -v",没有grep选项shell。 CP(' -R',' -dir',' outriz'); //如果已经使用了一个选项,你已经完成了
我们不再建议使用FlushJS的全局导入(即,' shelljs / global')))。虽然仍然支持方便,但这仍然应该谨慎使用全局名称空间。
除非另有说明,否则所有命令都同步运行。所有命令接受标准Bash Globbing字符(*,?等),与节点Lob模块兼容。
var str = cat('文件* .txt'); var str = cat(' file1'' file2'); var str = cat([' file1'' file2']; //与上述相同
返回包含给定文件的shellString,或者如果给出多个文件,则包含文件的Aconcatedated字符串(在每个文件之间引入了一行行字符)。
更改脚本持续时间的目录目录。如果没有提供参数,则会更改主题。返回shellstring以指示成功或失败。
通过指定八进制表单的Theabsolute权限或表达符号中的更改来改变文件或目录的权限。这命令尝试尽可能多地模拟POSIX行为。可不变的例外:
-n:禁止将目录添加到堆栈时的正常更改,以便仅操作堆栈。
DIR:将当前工作目录设置为堆栈的顶部,然后执行相同的CD DIR。
+ N:通过旋转堆栈来带来第n个目录(从名单中打印的列表的左侧,从Zero打印,从Zero开始)到列表的顶部。
-n:带来第n个目录(从名单的右侧计数通过旋转堆栈到列表顶部。
将当前目录保存在目录堆栈顶部,然后保存到CD到DIR。没有参数,普通交换前两个目录。返回堆栈中的一系列路径。
-N:禁止从堆栈中删除目录时更改普通目录更改,以便仅操作堆栈。
+ n:删除第n个目录(从名单的左侧计数),以零开头。
-n:删除第n个目录(从DIRS打印的列表的右侧计数),以零开始。
当没有给出参数时,popd从堆栈中删除顶部目录,并将CD执行到新顶部目录。该元素从0开始0,从具有DIRS列出的第一个目录(即,POPD相当于POPD +0)。返回堆栈中的一系列路径。
+ n:显示第n个目录(在没有选项的情况下在没有选项时,从左侧打印的列表的左侧计数),从零开始。
-N:显示第n个目录(从无选项时,从Dirs打印的列表的右侧计数),从零开始。
显示当前纪念目录的列表。返回堆栈中的路径数组,或指定了IF + n或-n的单个路径。
异步:异步执行。如果提供了回调,则无论传递的值如何,它将设置为true(默认值:false)。
编码:使用的字符编码。影响返回的值返回到stdout和stderr,并且在不在静音模式下写入stdout和stderr的值(默认值:' utf8')。
var版本= exec('节点 - version',{silent:true})。 stdout; var child = exec(' some_long_running_process',{async:true});孩子 。 stdout。 ON('数据'函数(数据){/ * ...使用数据... * /}); exec(' some_long_running_process',函数(代码,stdout,stderr){控制台。日志('退出代码:'代码);控制台。日志('程序输出: ',stdout);控制台。日志('程序stderr:' stderr);});
同步执行给定命令,除非另有规定。在同步模式下,这返回shellString.Porths,这将返回子进程对象,并呼叫呼叫refives参数(代码,stdout,stderr)。
没有看到你想要的行为? exec()通过shby default(或Windows上的cmd.exe)运行所有内容,这与bash不同。如果您是特定于BASH的行为,请尝试{shell:'路径/到/ bash'}选项。
安全说明:正如shell.exec()在主题shell中执行任意字符串,正确消毒用户输入至关重要,以避免命令注入。有关更多上下文,请咨询SecurityGuidelines。
来自LS(' -R'路径)的主要区别是生成的文件名称为基本目录(例如,lib / chources / file1而不是只属file1)。
从给定文件读取输入字符串,并返回包含与给定Regex_Filter匹配的所有行的shellString。
var str = head({' -n&#39 ;: 1},'文件* .txt'); var str = head(' file1',' file2'); var str = head([' file1',' file2']; //与上述相同
将源链接到dest。使用-f强制链接,应该是distexist。返回ShellString指示成功orfailure。
-l:列出表示每个文件的对象,每个文件都包含包含LS -L输出字段的字段。请参阅fs.stats更多信息
ls(' projs / *。js'); ls(' projs / ** / *。js'); //在Projs LS(' -R',' /用户/ me',' / tmp'在projs ls(' -39; / me; / tmp')中查找所有JS文件。 ls(' -r' [' /用户/ me',' / tmp']); //与上面相同(' -L'' file.txt'); // {name:' file.txt&#39 ;,模式:33188,nlink:1,...}
如果没有提供路径,则返回给定路径中的所有文件的ShellString(具有数组类似的属性),或者如果没有提供路径,则在当前目录中的文件。
从文件,行按行中读取输入字符串,并使用给定的Search_Regex和替换字符串ORFunction执行从输入字符串的JavaScript replace()oneAck行。更换后返回新的shellstring。
像UNIX SED一样,ShellJS SED支持捕获组。捕获组被指定为$ n语法:
此外,像UNIX SED一样,ShellJS SED在输入文件中的每一行上运行替换(分开' \ n'),所以search_regexes跨越多行(或inlclude' \ n&# 39;)与任何东西不匹配,什么都不会被替换。
返回文件的内容,按行排序为shellString。对多个文件进行排序混淆其内容(就像Unix排序一样)。
var str =尾部({' -n&#39 ;: 1},'文件* .txt'); var str =尾部(' file1',' file2'); var str = tail([' file1'' file2']; //与上述相同
if(测试(' -d' path)){/ *用dir * /}做点什么; if(!测试(' -f'路径))继续; //跳过它'常规文件
类似于重定向运营商>在UNIX中,但与贝尔特劳斯(如猫,Grep等)一起工作。与Unixredirections一样,to()将覆盖任何现有文件!返回相同的shellstring这操作,以支持链接。
类似于重定向和附录运算符>>在UNIX中,但与贝尔特劳斯(如猫,Grep等)一起工作。返回TheSame ShellString此操作,以支持链接。
将每个文件的访问和修改时间更新到当前时间。除非提供-c,否则不会创建未存在的文件参数。这是触摸的部分实现(1)。返回shellstring,指示成功或失败。
搜索系统和#39; S路径中的命令。在Windows上,这将使用Pathext变量,如果它' s尚未执行的,则使用pathage变量附加.rurns包含要命令的绝对路径的shellstring。
如果在最后一个命令中发生错误,则测试。如果返回anerror或否则伪造值,则返回真实值。
注意:不要依赖于此值是错误消息。如果您需要上次错误消息,则从最后一个命令&#39的返回值中usedhe .stderr属性。
这是大多数shelljs方法返回的专用类型,该方法包装(或数组)值。这具有所有字符串(或数组)方法,Butalso公开了额外的方法:.to(),.toend(),以及所有的管道方法(例如.cat(),.cat(),.grep()等)。这可以很容易地转换为呼叫.tostring()。
此类型还通过.stdout(string),.stderr(string)和.code(numbers)属性公开相应的命令和#39; s stdout,stdout,andreturn状态代码。
grep(' foo'' file1.txt',' file2.txt')。 SED(/ O / G,' A')。 (' output.txt');回声('文件名称:\ n' + ls()。grep(' o'));猫(' test.js')。 Exec('节点'); // pipe to exec()呼叫
命令可以以管道状方式将其输出发送到另一个命令。 SED,Grep,Cat,EXEC,以及令人垂涎的管道上。管道可以被束缚。
var sh =要求(' shelljs'); var silentstate = sh。 配置。 沉默的 ; //保存旧的静音状态Sh。 配置。 沉默=真; / * ... * / sh。 配置。 沉默=沉秒; //恢复旧沉默状态 如果为true,则脚本将在任何shell.jscommand遇到错误时抛出JavaScript错误。 默认为false。 这是类似的烟草' s set -e。 var shell =要求(' shelljs'); //对shell.config进行更改,并执行文件... / * ... * / shell。 配置。 重启 ( ) ; //重置为原始状态//做更多的东西,但使用原始设置/ * ... * /