Bash 스크립트 내부의 새 터미널 창에서 시작된 프로그램의 오류 코드를 검색하려고 합니다. 다음과 같이 단순화할 수 있습니다.
#!/bin/bash
urxvt -e bash -c "exit 4"
echo $?
출력: 0
urxvt를 호출하는 스크립트에서 "4"에 액세스하고 싶습니다. 어떻게 해야 하나요? :)
답변1
uxvrt
AFAIK 그래픽 터미널에는 실행 중인 프로그램에 대한 반환 코드를 제공할 수 있는 유틸리티가 없습니다 .
내가 생각할 수 있는 가장 좋고 가장 간단한 방법은 내부에서 하위 쉘을 실행하고 bash
(약간 혼란스러워 보이지만 저를 믿으십시오) 내부에서 원하는 프로그램을 실행 bash
하고 외부 쉘을 사용하여 반환 코드를 처리하는 것입니다. 이는 아래와 같습니다. :
urxvt -e bash -c ' (exit 4) ; echo $? > error.code '
이제 파일에서 반환 코드를 읽을 수 있습니다 error.code
.
echo
코드를 반환 하면 urxvt
몇 천 초 후에 닫히는 창 에 코드가 인쇄되므로 임시 파일이 있어야 합니다 . 그래서 당신은 유용한 것을 얻지 못할 것입니다.
답변2
이것은 Parsa Mousavi의 답변의 확장입니다. 작업을 수행하는 동안 그보다 더 복잡한 작업을 수행하는 경우 따옴표를 추적하지 못할 exit 4
수 있습니다.
보다 유연한 옵션은 다음과 같습니다.
#!/bin/bash
myfunc(){
(
#Other statements...
exit 4
)
echo $? > errorcode
}
export -f myfunc
uxrvt -e bash -c 'myfunc'
echo "Error code:"
cat errorcode
bash
새 터미널에서 실행되는 프로그램도 이 기능을 얻으 려면 내보내기가 필요합니다 .
POSIX 쉘은 함수 내보내기를 허용하지 않습니다. 이식 가능한 대안으로 단순화를 위해 동일한 디렉터리에 두 개의 스크립트를 만듭니다.
main
:
#!/bin/sh
urxvt -e sh -c './secondary'
echo "Error code of secondary:"
cat errorcode
secondary
:
#!/bin/sh
myfunc(){
#Here your statements...
exit 4
}
(myfunc)
echo $? > errorcode
실행 가능( chmod +x main secondary
) 및 실행을 모두 만듭니다 ./main
. 당신은 자격이
Error code of secondary:
4
서브쉘에서 실행된다는 점에 유의하십시오 myfunc
. 그렇지 않으면 프로그램이 종료되고 해당 echo $?
행이 실행되지 않습니다.