国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Ruby中執行Linux shell命令的六種方法詳解

2019-10-26 19:24:59
字體:
來源:轉載
供稿:網友

在Ruby中,執行shell命令是一件不奇怪的事情,Ruby提供了大概6種方法供開發者進行實現。這些方法都很簡單,本文將具體介紹一下如何在Ruby腳本中進行調用終端命令。

exec

exec會將指定的命令替換掉當前進程中的操作,指定命令結束后,進程結束。

代碼如下:
exec 'echo "hello world"'
print 'abc'

執行上述的命令,結果如下,我們可以看到沒有abc的輸出,可以看出來,在執行echo "hello world"命令后進程就結束了。不會繼續執行后面的print 'abc'。

代碼如下:
ruby testCommand.rb
hello world

使用exec一個頭疼的事情就是沒有辦法知道shell命令執行成功還是失敗。

system

system和exec相似,但是system執行的命令不會是在當前進程,而是在一個新創建的進程。system會返回布爾值來表明命令執行結果是成功還是失敗。

代碼如下:
$ irb
> system 'echo "hello $HOSTNAME"'
hello androidyue
 => true
> puts $?
pid 11845 exit 0
 => nil
> system 'false'
 => false
> puts $?
pid 11858 exit 1
 => nil
>>

system會將進程的退出的狀態碼賦值給$?,如果程序正常退出,$?的值為0,否則為非0。通過檢測退出的狀態碼我們可以在ruby腳本中拋出異常或者進行重試操作。

注:在Unix-like系統中進程的退出狀態碼以0和非0表示,0代表成功,非0代表失敗。

system可以告訴我們命令執行是成功還是失敗,但是有些時候我們需要得到執行命令的輸出,并在腳本中使用。顯然system無法直接滿足,需要我們使用反引號來實現。

反引號(`)

使用反引號是shell中常用的獲取命令輸出內容的方法,在ruby中也是可以,而且一點都需要做改變。使用反引號執行命令也會將命令在另一個進程中執行。

代碼如下:
1.9.3p448 :013 > today = `date`
 => "Sat Nov 15 19:28:55 CST 2014/n"
1.9.3p448 :014 > $?
 => #<Process::Status: pid 11925 exit 0>
1.9.3p448 :015 > $?.to_i
 => 0
1.9.3p448 :016 >

上面的方法如此簡單,我們可以直接對返回的字符串結果進行操作。

注意,$?已經不再是上述的那樣單純的退出狀態碼了,它實際上是一個Process::Status對象。我們從中不僅可以知道進程的退出狀態碼也可以知道進程的ID。使用$?.to_i會得到退出的狀態碼,使用$?.to_s會得到包含了進程id,退出狀態碼等信息的字符串。

使用反引號的一個結果就是我們只能得到標準的輸出(stdout)而不能得到標準的錯誤信息(stderr),比如下面的例子,我們執行一個輸出錯誤字符串的perl腳本。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东台市| 高州市| 扬中市| 峨眉山市| 铁力市| 如东县| 土默特左旗| 堆龙德庆县| 腾冲县| 沙洋县| 芜湖市| 高雄县| 丁青县| 台安县| 土默特左旗| 天长市| 中宁县| 仁化县| 太保市| 达孜县| 民县| 广宁县| 马山县| 巴林左旗| 屏南县| 延川县| 如皋市| 泰兴市| 常熟市| 门源| SHOW| 台安县| 陵川县| 连平县| 石景山区| 吉水县| 武鸣县| 大安市| 黄浦区| 九江市| 区。|