Основная ошибка заключается в том, что вы делаете системный вызов, и системный вызов не собирается выдавать вам исключение при сбое.
Так что вы можете сделать это
#!/bin/env ruby
require 'fileutils'
begin
FileUtils.cp '/path/to/file', '/current/directory/'
rescue Errno::ENOENT
print('File was not found')
exit 1
end
Очевидно, что вы можете спасти все исключения, но это хорошая практика, чтобы сказать, с какой ошибкой вы хотите справиться.
если вы все еще пытаетесь сделать это с помощью системного вызова, вы можете сделать что-то вроде этого
#!/bin/env ruby
unless system('/bin/cp /path/to/file /current/directory/ 2> /dev/null')
puts 'my custom error'
exit(1)
end
но довольно уродливо, и вы теряете контроль, если хотите управлять многими ошибками (например, не осталось места)