터미널 명령을 검증하는 가장 좋은 방법은 레일에서 성공적으로 실행됩니까?
-
05-07-2019 - |
문제
나는 빠른 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
명령이 성공했는지 여부에 따라 또한, $?
오류 상태를 포함합니다.
- 단지 pedantic이 되려면 an을 검증 할 수 없습니다
exec
'd 명령 때문에exec
현재 프로그램을 THO로 대체합니다exec
'd 명령, 따라서 명령은 유효성 검사를 위해 루비로 돌아 오지 않습니다. - CP의 경우 적어도 쉘에 떨어지지 않고 FileUtils 모듈 (루비 표준 라이브러리의 일부)을 사용하는 것이 좋습니다.
- 위에서 언급 한 바와 같이,
$?
사전 정의 된 변수는 다음에 의해 실행될 마지막 명령의 리턴 코드를 제공합니다.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
제휴하지 않습니다 StackOverflow