六種用ruby呼叫執行shell命令的方法
碰到需要呼叫作業系統shell命令的時候,Ruby為我們提供了六種完成任務的方法:
1.Exec方法:
Kernel#exec方法透過呼叫指定的命令取代當前程式:
例子:
$ irb
>> exec 'echo "hello $HOSTNAME"'
hello nate.local
$
值得注意的是,exec方法用echo命令來取代了irb程式從而退出了irb。主要的缺點是,你無法從你的ruby指令碼里知道這個命令是成功還是失敗。
2.System方法。
Kernel#system方法操作命令同上, 但是它是執行一個子shell來避免覆蓋當前程式。如果命令執行成功則返回true,否則返回false。
$ irb
>> system 'echo "hello $HOSTNAME"'
hello nate.local
=> true
>> system 'false'
=> false
>> puts $?
256
=> nil
>>
3.反引號(Backticks,Esc鍵下面那個鍵)
$ irb
>> today = `date`
=> "Mon Mar 12 18:15:35 PDT 2007n"
>> $?
=> #<Process::Status: pid=25827,exited(0)>
>> $?.to_i
=> 0
這種方法是最普遍的用法了。它也是執行在一個子shell中。
4.IO#popen
$ irb
>> IO.popen("date") { |f| puts f.gets }
Mon Mar 12 18:58:56 PDT 2007
=> nil
5.open3#popen3
$ irb
>> stdin, stdout, stderr = Open3.popen3('dc')
=> [#<IO:0x6e5474>, #<IO:0x6e5438>, #<IO:0x6e53d4>]
>> stdin.puts(5)
=> nil
>> stdin.puts(10)
=> nil
>> stdin.puts("+")
=> nil
>> stdin.puts("p")
=> nil
>> stdout.gets
=> "15n"
6.Open4#popen4
$ irb
>> require "open4"
=> true
>> pid, stdin, stdout, stderr = Open4::popen4 "false"
=> [26327, #<IO:0x6dff24>, #<IO:0x6dfee8>, #<IO:0x6dfe84>]
>> $?
=> nil
>> pid
=> 26327
>> ignored, status = Process::waitpid2 pid
=> [26327, #<Process::Status: pid=26327,exited(1)>]
>> status.to_i
=> 256
©著作權歸作者所有:來自51CTO部落格作者blackanger的原創作品,如需轉載,請註明出處,否則將追究法律責任
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3209/viewspace-2820417/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在 Ruby 中執行 Shell 命令的 6 種方法
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- Linux shell:執行shell指令碼的幾種方式Linux指令碼
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- python裡執行shell命令或cmd命令Python
- 【Mongo】shell命令列模式執行mongo命令Go命令列模式
- awk小技巧之執行shell命令
- [20210618]記錄bash shell執行的命令.txt
- python執行系統命令四種方法比較Python
- Python中執行系統命令常見的幾種方法Python
- Python-呼叫執行系統命令Python
- shell指令碼linux命令連續執行指令碼Linux
- shell指令碼命令 執行python檔案&python命令列執行python程式碼指令碼Python命令列
- [譯] Ruby 2.6 String的split 方法支援程式碼塊執行
- 呼叫JavaCalls::call()方法來執行Java方法Java
- Golang 使用執行命令帶管道符執行的方法Golang
- crontab異常:shell下可以執行命令,執行crontab卻報錯
- shell指令碼的三種執行方式和區別指令碼
- Jenkins踩坑之旅:nohup後臺執行shell命令Jenkins
- Linux系統執行命令方法Linux
- windows下 power shell啟動,呼叫ssh命令Windows
- 在本地執行 LLMs 的 6 種方法
- 【 Thread】建立執行緒的2種方法thread執行緒
- java中常見的六種執行緒池詳解Java執行緒
- 通過ICMP協議反彈SHELL並執行命令協議
- java 執行shell命令及日誌收集避坑指南Java
- 建立執行緒的4種方法 and 執行緒的生命週期執行緒
- 【Java】利用反射執行Spring容器Bean指定的方法,支援多種引數自動呼叫Java反射SpringBean
- 用 Explain 命令分析 MySQL 的 SQL 執行AIMySql
- Linux下快速執行歷史命令的方法Linux
- Thread 中的 join() 方法的作用是呼叫執行緒等待該執行緒執行完後,再繼續執行thread執行緒
- 在指令碼中呼叫git命令:指定git命令執行上下文指令碼Git
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Java的六種執行緒狀態及程式碼示例Java執行緒
- 終止java執行緒的2種方法Java執行緒
- Java建立多執行緒的一種方法Java執行緒
- Oracle提高SQL執行效率的三種方法ITOracleSQL
- 如何從 Vim 中訪問 shell 或者執行外部命令