Pergunta

Eu estou escrevendo um app Rails rápida e queria saber como eu pode validar o sucesso de um comando exec'd. Os dois comandos Estou em execução e atualização SVN e um cp de um diretório para outro.

Foi útil?

Solução

Se você usar o Kernel.system () método ele irá retornar um booleano que indica o sucesso do comando.

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

Há uma boa comparação de diferentes comandos do sistema ruby ?? aqui .

Outras dicas

Como você está executando os comandos externos? The Ruby função system() retornos true ou false dependendo se o comando foi bem sucedido. Além disso, $? contém um status de erro.

  1. Apenas para ser pedante, você não pode validar um comando exec'd porque exec substitui o programa atual com o comando exec'd, então o comando nunca mais voltaria para Ruby para validação.
  2. Para o cp, pelo menos, você provavelmente seria melhor de usar o módulo FileUtils (parte da biblioteca padrão do Ruby), em vez de cair para o shell.
  3. Como observado acima, a variável $? predefinidos lhe dará o código de retorno do último comando a ser executado pelo system() ou o operador de crase.

Para atualização SVN, verifique o número da versão antes e depois da atualização.

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

Para o cp, você poderia fazer uma verificação de tamanho do arquivo no arquivo original sendo igual ao arquivo copiado.

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top