如何检查ruby shell脚本中的命令返回码?

6yt4nkrj  于 2022-12-18  发布在  Ruby
关注(0)|答案(1)|浏览(152)

我有一个用ruby编写的简单shell脚本,它运行一些预定义的命令并保存输出字符串。
这个脚本运行良好,但是如果命令失败,我需要一个有条件的路分支。我试过使用$?对象,但是脚本在到达那里之前就退出了。

#!/usr/bin/ruby

def run_command(cmd)
  `#{cmd}`
  if $?.success?
    # continue as normal
  else
    # ignore this command and move on
  end
end

run_command('ls')
run_command('not_a_command')

# Output:
# No such file or directory - not_a_command (Errno::ENOENT)...

我尝试过$?.exitstatus,甚至只是puts $?,但它总是在到达那里之前退出,因为脚本显然在到达该行之前运行了命令。
有没有办法在脚本中实际运行命令之前 * 检查命令是否会运行?
希望你已经明白了,谢谢你抽出时间!

qv7cva1a

qv7cva1a1#

使用system(根据退出代码返回true或false)而不是反勾号(返回输出字符串):

if system(cmd)
  ...
else
  ...
end

如果您希望它安静地运行而不污染您的日志/输出:

system(cmd, out: File::NULL, err: File::NULL)

相关问题