, 그래서 나는 다음 줄을 사용 secondScript 실패 (잘못된 인수)로 테스트하십시오. otherUser를 종료했거나 $ 상태가 실제로 su 명령의 결과인지 여부가 확실하지 않습니다. 어떤 제안이라도?!KSH 스와 -c 반환 값 I가 다른 사용자로 두 개의 스크립트를 실행해야 내 스크립트의 내부
0
A
답변
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
고마워요 !!! –
'status'에 대한 할당이 따옴표 안에 있기 때문에 바깥 쪽 쉘에서 'otherUser', * not *로 실행되는 내부 쉘에 할당됩니다. 따라서,이 코드는 독립적으로 실행되며, 숫자로 된 종료 값이없는 출력으로'반환 '을 내 보낸다. (그리고'return'에 대한 명시적인 인수가 없으면'echo' 명령의 종료 상태를 반환 할 것이다. 비정상적인 오류가없는 경우 0이됩니다). –