我試圖通過Ruby運行一系列命令,並捕獲stdin
,stdout
,和exitstatus。在同一個shell進程中運行多個命令
require "open3"
require "pp"
command_list = [
"export MY_ENV_VAR=foobar",
"printenv MY_ENV_VAR"
]
executed_commands = []
result = nil
command_list.each do |command|
stdout, stderr, status = Open3.capture3(command)
result = status.exitstatus
executed_commands << [command, stdout, stderr, result]
break if result != 0
end
pp executed_commands
puts "exited with #{result} exit status."
該過程退出具有非零狀態,表明該命令printenv MY_ENV_VAR
失敗,並且這些命令不被在同一進程中運行。
如何可以在一個單一的外殼進程執行的一系列命令,記錄stdin
,stdout
,stderr
和每個命令的退出狀態?
我將如何創建一個父shell進程,然後在該shell中執行一系列命令? – Richard
你可以試着把多個命令放在一個字符串中,並用'&&'或';'分隔它們。我建議前者,因爲只要出現錯誤就會停止。 –