Как лучше всего проверить успешность выполнения команды терминала в Rails?

StackOverflow https://stackoverflow.com/questions/171343

Вопрос

Я пишу быстрое приложение Rails и задаюсь вопросом, как я могу проверить успех выполняемой команды.Я запускаю две команды: обновление SVN и cp из одного каталога в другой.

Это было полезно?

Решение

Если вы используете Ядро.система() метод, он вернет логическое значение, указывающее на успех команды.

result = system("cp -r dir1 dir2")
if(result)
#do the next thing
else
# handle the error

Есть хорошее сравнение различных системных команд Ruby. здесь.

Другие советы

Как вы выполняете внешние команды? Функция Ruby system () возвращает true или false в зависимости от того, была ли команда успешной. Кроме того, $? содержит состояние ошибки.

<Ол>
  • Просто чтобы быть педантичным, вы не можете проверить команду exec 'd, потому что exec заменяет текущую программу на exec ' d команда, поэтому команда никогда не вернется в Ruby для проверки.
  • По крайней мере, для cp вам лучше использовать модуль FileUtils (часть стандартной библиотеки Ruby), чем переходить на оболочку.
  • Как отмечалось выше, предопределенная переменная $? предоставит вам код возврата последней команды, которая должна быть выполнена system () или оператором обратной галочки.
  • Для обновления SVN проверьте номер версии до и после обновления.

    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
    

    Для cp вы можете проверить размер файла, если исходный файл равен скопированному файлу.

    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
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top