天天看點

ruby和linux shell共同程式設計的示例

    有了shell為毛還要ruby呢?話不能這麼說,有些小功能用ruby還是很友善的,比如說字元串的反轉再加1功能用shell來寫就比較麻煩.str="123456",我們定義一個反轉後再+1的小方法:

執行後str變為:

2.1.5 :026 > "123456".r_add_1

 => "765432" 

下面我們寫一個腳本把shell中的變量r_add_1一下:

執行一下看看:

apple@kissair: ruby_src$./read.sh

apple@kissair: ruby_src$echo $ret

apple@kissair: ruby_src$

咦,為毛ret變量為空值啊?道理很簡單:管道2側是2個不同程序,加上主bash的程序,一共是3個程序。你不用指望read ret程序建立的變量會在主bash程序中生效啊!一種解決辦法是用小括号強制read ret和echo在一個程序中執行以擷取傳回值:cat <<eof|ruby|(read ret;echo $ret):

:98765432dcb

必須要加小括号哦,否則read ret和echo還是在2個程序,等于做無用功啊!你可以這樣做:

apple@kissair: ruby_src$my_val=$(./read.sh)

apple@kissair: ruby_src$echo $my_val

這樣就将傳回結果儲存在主bash程序中的my_val變量中了哦。或者你在while循環中自己處理吧,因為while循環和read也在一個程序裡哦,改寫後的shell代碼如下:

你要是覺得看的cat那一行太長,可以把do...done放到eof結尾的後面,效果是一樣的:

最後執行read.sh都會顯示:

>>>> :98765432dcb

一切皆有可能!你最後肯定還會問:為毛我不用$my_val=$(ruby -e"xxx")這種純ruby的更簡單方法,而要用shell+ruby混合的複雜方法呢??答案是:我不是在舉ruby+shell的例子嗎!?

ruby和linux shell共同程式設計的示例

 呵呵

繼續閱讀