2014-10-24 5 views
0

, 그래서 나는 다음 줄을 사용 secondScript 실패 (잘못된 인수)로 테스트하십시오. otherUser를 종료했거나 $ 상태가 실제로 su 명령의 결과인지 여부가 확실하지 않습니다. 어떤 제안이라도?!KSH 스와 -c 반환 값 I가 다른 사용자로 두 개의 스크립트를 실행해야 내 스크립트의 내부

+0

'status'에 대한 할당이 따옴표 안에 있기 때문에 바깥 쪽 쉘에서 'otherUser', * not *로 실행되는 내부 쉘에 할당됩니다. 따라서,이 코드는 독립적으로 실행되며, 숫자로 된 종료 값이없는 출력으로'반환 '을 내 보낸다. (그리고'return'에 대한 명시적인 인수가 없으면'echo' 명령의 종료 상태를 반환 할 것이다. 비정상적인 오류가없는 경우 0이됩니다). –

답변

1

su이 호출하는 내부 셸이 아니라 외부 셸 내부에 status을 캡처해야합니다. 그렇지 않으면 캡쳐 된 값은 내부 쉘이 종료되자 마자 버려집니다.

su은 실행중인 명령의 종료 상태를 통과하기 때문에 훨씬 쉽게 만들어집니다. - 명령이 0이 아닌 상태로 종료되면 su도 종료됩니다. 이것은 단지 (원래 코드가했던 것처럼, 그것이 제대로 작동했다) secondScript의 종료 상태를 반환

su otherUser -c 'firstScript; secondScript'; status=$? 
echo "returning $status" 
return $status 

참고. firstScript이 실패 할 때 당신이 원하는 것을 생각할 수도 있습니다. 당신은 단지 firstScript의 종료 코드를 반환 할 경우


지금, 그것은 좀 더 흥미로운; 이 경우, 당신은 모두 쉘의 종료 상태를 캡처해야합니다

su otherUser -c 'firstScript; status=$?; secondScript; exit $status'); status=$? 
echo "returning $status" 
return $status 

당신이 firstScript이 성공하는 경우에만 secondScript를 실행하고, 그 중 하나가 실패하면 0이 아닌 값을 반환 할 경우, 그것을

su otherUser -c 'firstScript && secondScript'); status=$? 
echo "returning $status" 
return $status 
+0

고마워요 !!! –