日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
當(dāng)Shell遇上了Node.js

好吧,我承認(rèn),這個(gè)標(biāo)題有點(diǎn)曖昧的基情,但是希望下文的內(nèi)部能給不熟悉或不喜歡Shell或WIN平臺(tái)下的批處理編寫(xiě)的工程師帶來(lái)一些幫助。

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出樅陽(yáng)免費(fèi)做網(wǎng)站回饋大家。

推薦專(zhuān)題:Node.js專(zhuān)區(qū)

首先,我承認(rèn)Shell腳本配置sed,awk等工作已經(jīng)相當(dāng)強(qiáng)大了,熟悉的朋友就對(duì)下面的內(nèi)容一笑而過(guò)吧,但是如果你喜歡上了NODE,那就讓我們繼續(xù)旅程吧:

好吧,先做一段簡(jiǎn)單的Shell得到時(shí)間差代碼的冷菜diff.sh:

 
 
 
  1. #!/bin/bashSTART=$(date +%s)  
  2. # 洗菜之類(lèi)的事先準(zhǔn)備吧  
  3. du -m /home > /tmp/output  
  4. # 吃完了  
  5. END=$(date +%s)  
  6. DIFF=$(( $END - $START ))  
  7. echo "化了$DIFF 秒搞定"   
  8.  
  9. chmod +x diff.sh  
  10. sh diff.sh 

執(zhí)行結(jié)果如下:

化了0 秒搞定

~o,能吃這么塊嗎,難道BUG了吧,好吧,是速度太快了,只是腳本中采用的是秒數(shù)級(jí)別的范圍,估計(jì)只能用納秒也進(jìn)行,并在Shell做除法運(yùn)算。好吧,再采用NODE試一把看看vim diff.js:

 
 
 
  1. #!/usr/bin/env node  
  2. var util  = require('util'),  
  3.     spawn = require('child_process').spawn,  
  4.     ls    = spawn('du', ['-m','/home/']);  
  5. var start = +new Date();  
  6. ls.stdout.on('data', function (data) {  
  7. //console.log('stdout: ' + data);  
  8. });  
  9.  
  10. ls.stderr.on('data', function (data) {  
  11.   console.log('stderr: ' + data);  
  12. });  
  13.  
  14. ls.on('exit', function (code) {  
  15.   var end = + new Date();  
  16.   console.log(end-start);  
  17. }); 

執(zhí)行一下./diff.js:

1113

時(shí)間直接顯示是毫秒級(jí)別,是不是感覺(jué)更舒服些,好吧,我承認(rèn)做這樣的比較,并不是說(shuō)要一決高低,只是用前端攻城師喜歡的方式工具去做菜,依賴于Shell的強(qiáng)大功能基礎(chǔ)之上,當(dāng)然喜歡不同的語(yǔ)言的攻城師也可以用Python,Ruby之類(lèi)的語(yǔ)言去實(shí)現(xiàn)。

好的,如果你覺(jué)得有趣,那就接著跟著我向前,否則就直接拍磚吧,哈哈。

以上示例可以看到,借用Shell腳本,NodeJs內(nèi)置功能做一些常用的小菜是很方便的而且很靈活,Shell腳本功能的強(qiáng)大之為就是流的重定向處理等,是不是需要采用寫(xiě)成腳本或直接如果采用一采超復(fù)雜的命令來(lái)搞定,呵呵,對(duì)我們之為的非系統(tǒng)管理員可能有一定的難度,好,那就拿出強(qiáng)大點(diǎn)的菜刀procstreams,看看它是怎么做菜的吧:

 
 
 
  1. #!/usr/bin/env node  
  2. var p = require('procstreams');  
  3. p('cat app.log').pipe('wc -l')  
  4.   .data(function(stdout, stderr) {  
  5.       console.log(stdout);  
  6.   }); 

上面的JS代碼是實(shí)現(xiàn)統(tǒng)計(jì)app.log的行數(shù),相當(dāng)于Shell的cat app.log | wc -l功能,感覺(jué)怎樣,如果要實(shí)現(xiàn)復(fù)雜或交互的功能,會(huì)不會(huì)更靈活些呢。再上一菜

 
 
 
  1. #!/usr/bin/env node  
  2. var p = require('procstreams');  
  3.     p('mkdir foo')  
  4.        .and('rm file.txt')  
  5.           .on('exit', function() {    
  6.                 console.log('done');    
  7.            }); 

是不是很熟悉的感覺(jué)? 如果執(zhí)行腳本的時(shí)還需要處理復(fù)雜一些的參數(shù)對(duì)應(yīng)的問(wèn)題,怎么辦?沒(méi)關(guān)系,node-optimist 及 isaacs's nopt 之類(lèi)的工作早就等著你們這類(lèi)的攻城師呢? 再上最后一道菜:

 
 
 
  1. #!/usr/bin/env node  
  2. var util  = require('util'),  
  3.   spawn = require('child_process').spawn;  
  4. var argv = require('optimist').argv;  
  5. var cmd =  argv.cmd;  
  6. var args = argv.args  
  7. var option = argv.opt  
  8. console.log(cmd + '  ' + args + '  ' + option);  
  9. var ls    = spawn(cmd , [args ,option]);  
  10. ls.stdout.on('data', function (data) {  
  11.   if (!data || !!data)  console.log(' i believe it');  
  12. });  
  13.  
  14. ls.stderr.on('data', function (data) {  
  15.   console.log('It\'s a miracle!');  
  16. });  
  17.  
  18. ls.on('exit', function (code) {  
  19.    console.log('it.justHappened();');  
  20. }); 

~親,謝謝你,一直走到了最后,以上只是個(gè)人在工作寫(xiě)有些寫(xiě)Shell腳本時(shí)常因?yàn)橐粋€(gè)空格或格式之類(lèi)的情況查找半天而抓狂不已,以后采用和NODEJS結(jié)合會(huì)不會(huì)更淡定些,請(qǐng)各各抒己見(jiàn),歡迎拍磚吧。

原文:http://club.cnodejs.org/topic/4f2a2f80aa8e490b1106909b

【編輯推薦】

  1. 走近Node.js的異步代碼設(shè)計(jì)
  2. Node.js的循環(huán)依賴
  3. 用Eclipse調(diào)試Node.js代碼
  4. Node.js后端框架設(shè)計(jì)構(gòu)想
  5. 用Web socket和Node.js實(shí)現(xiàn)HTML 5畫(huà)布的實(shí)時(shí)繪圖

網(wǎng)站名稱:當(dāng)Shell遇上了Node.js
轉(zhuǎn)載源于:http://www.5511xx.com/article/dphgjsg.html