gpt4 book ai didi

ruby - 在同一个 shell 进程中运行多个命令

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:58 26 4
gpt4 key购买 nike

我正在尝试通过 Ruby 运行一系列命令,并捕获 stdinstdoutstderr 和退出状态。

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 命令失败,并且这些命令未在同一进程中运行。

如何在单个shell进程中执行一系列命令,记录stdinstdoutstderr和exitstatus每个命令的?

最佳答案

如果不是绝对必要,我强烈建议您不要将多个 shell 命令链接到一个系统调用中。一个主要的警告是您不能单独检查链中每个命令的返回码。这导致缺乏对命令流的控制。例如,如果链中的第一个命令因任何原因失败,则无论第一个命令的状态如何,后续命令仍将尝试执行。这可能是不可取的。

我建议将 popen 功能封装到一个方法中,然后为每个要运行的命令调用该方法。这将允许您在逐个命令的基础上对任何失败的执行使用react。

关于ruby - 在同一个 shell 进程中运行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44576683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com