What is the best way to validate a terminal command has run successfully in Rails?
-
05-07-2019 - |
Question
I'm writing a quick Rails app and was wondering how I can validate the success an exec'd command. The two commands I'm running are and SVN update, and a cp from one directory to another.
Solution
If you use the Kernel.system() method it will return a boolean indicating the success of the command.
result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error
There is a good comparison of different ruby system commands here.
OTHER TIPS
How are you executing the external commands? The Ruby system()
function returns true
or false
depending on whether the command was successful. Additionally, $?
contains an error status.
- Just to be pedantic, you can't validate an
exec
'd command becauseexec
replaces the current program with theexec
'd command, so the command would never return to Ruby for validation. - For the cp, at least, you would probably be better of using the FileUtils module (part of the Ruby Standard Library), rather than dropping to the shell.
- As noted above, the
$?
predefined variable will give you the return code of the last command to be executed bysystem()
or the backtick operator.
For SVN update, check the version number before and after the update.
svn_start_version = IO.popen("svn info").readlines[4]
`svn update`
svn_end_version = IO.popen("svn info").readlines[4]
if svn_end_version > svn_start_version
"success"
end
For the cp, you could do a filesize check on the original file being equal to the copied file.
source_file_size = IO.popen("du file1").readlines
`cp file1 file2`
dest_file_size = IO.popen("du file2").readlines
if dest_file_size == source_file_size
"success"
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow