터미널 명령을 검증하는 가장 좋은 방법은 레일에서 성공적으로 실행됩니까?

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

문제

나는 빠른 Rails 앱을 작성하고 있으며 Exec'd 명령의 성공을 어떻게 검증 할 수 있는지 궁금했습니다. 내가 실행중인 두 명령은 SVN 업데이트이며 한 디렉토리에서 다른 디렉토리로 CP입니다.

도움이 되었습니까?

해결책

당신이 사용하는 경우 kernel.system () 방법은 명령의 성공을 나타내는 부울을 반환합니다.

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

다른 루비 시스템 명령을 잘 비교할 수 있습니다. 여기.

다른 팁

외부 명령을 어떻게 실행하고 있습니까? 루비 system() 기능이 반환됩니다 true 또는 false 명령이 성공했는지 여부에 따라 또한, $? 오류 상태를 포함합니다.

  1. 단지 pedantic이 되려면 an을 검증 할 수 없습니다 exec'd 명령 때문에 exec 현재 프로그램을 THO로 대체합니다 exec'd 명령, 따라서 명령은 유효성 검사를 위해 루비로 돌아 오지 않습니다.
  2. CP의 경우 적어도 쉘에 떨어지지 않고 FileUtils 모듈 (루비 표준 라이브러리의 일부)을 사용하는 것이 좋습니다.
  3. 위에서 언급 한 바와 같이, $? 사전 정의 된 변수는 다음에 의해 실행될 마지막 명령의 리턴 코드를 제공합니다. 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