作業系統或 Shell 命令
Exec:
Exec 的功能非常有限,執行後將退出 Ruby 程式並執行命令。
System 命令:
System 命令在子 shell 中執行,而不是替換當前程序並返回 true 或 nill。與反引號一樣,系統命令是一個阻塞操作,主應用程式在此操作中等待,直到系統操作的結果完成。在這裡,主要操作永遠不必擔心捕獲從子程序引發的異常。
系統函式的輸出將始終為 true 或 nil,具體取決於指令碼是否已執行且沒有錯誤。因此,執行指令碼時的每個錯誤都不會傳遞給我們的應用程式。主要操作永遠不必擔心捕獲從子程序引發的異常。在這種情況下,輸出為 nil,因為子程序引發了異常。
這是一個阻塞操作,其中 Ruby 程式將等待命令的操作完成後再繼續。
系統操作使用 fork 來分叉當前程序,然後使用 exec 執行給定的操作。
反引號(`):
反引號字元通常位於鍵盤上的轉義鍵下方。反引號在子 shell 中執行,而不是替換當前程序並返回命令的結果。
在這裡,我們可以獲得命令的輸出,但程式將在生成異常時崩潰。
如果子程序中存在異常,則將該異常提供給主程序,如果未處理異常,則主程序可能會終止。這是一個阻塞操作,其中 Ruby 程式將等待命令的操作完成後再繼續。
系統操作使用 fork 來分叉當前程序,然後使用 exec 執行給定的操作。
IO.popen:
IO.popen 在子程序中執行。這裡,子過程標準輸入和標準輸出連線到 IO 物件。
Popen3:
Popen3 允許你訪問標準輸入,標準輸出和標準錯誤。
子程序的標準輸入和輸出將返回到 IO 物件。
$? (與$ CHILD_STATUS 相同)
可以與反引號,系統()或%x {}操作一起使用,並提供上次執行系統命令的狀態。
這可能對訪問 exitstatus
和 pid
屬性很有用。
$?.exitstatus