Home > Blockchain >  How to check for command return codes inside a ruby shell script?
How to check for command return codes inside a ruby shell script?

Time:12-16

I have a simple shell script written in ruby that runs some predefined commands and saves the output strings.

The script works well, but I need a way branch conditionally if the command fails. I've tried using the $? object but the script exits before it gets there.

#!/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)...

I've tried $?.exitstatus or even just puts $? but it always exits before it gets there because the script is obviously running the command before hitting that line.

Is there a way to check if the command will run before actually running it in the script?

Hope that's clear, thanks for your time!

CodePudding user response:

Use system (which returns true or false depending on exit code) instead of backticks (which return output string):

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

If you want it to run quietly without polluting your logs / output:

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