![실행 권한 없이 바이너리를 실행하려고 할 때 표시되는 오류](https://linux55.com/image/209712/%EC%8B%A4%ED%96%89%20%EA%B6%8C%ED%95%9C%20%EC%97%86%EC%9D%B4%20%EB%B0%94%EC%9D%B4%EB%84%88%EB%A6%AC%EB%A5%BC%20%EC%8B%A4%ED%96%89%ED%95%98%EB%A0%A4%EA%B3%A0%20%ED%95%A0%20%EB%95%8C%20%ED%91%9C%EC%8B%9C%EB%90%98%EB%8A%94%20%EC%98%A4%EB%A5%98.png)
제대로 작동하지 않는 타사의 스크립트가 있습니다. 프로세스가 시작되어야 합니다. 실행 가능 경로와 해당 매개변수는 $1
첫 번째 인수( )로 스크립트에 전달됩니다.
[...]
echo "Good ´ol printf-debugging in 2022"
echo $1
$1 &> /dev/null &
ExitStatus=$?
PID=$!
echo "PID = " $PID
echo "ExitStatus (before wait) = " $ExitStatus
wait $PID
echo "ExitStatus (after wait) = " $ExitStatus
[...]
이것은 다음을 인쇄합니다:
Good ´ol printf-debugging in 2022
/opt/daq-logger/daq-logger /media/sdcard/daq
PID = 493
ExitStatus (before wait) = 0
출력은 여기서 중지됩니다(그러나 명령은 완료됩니다).
$1 &> /dev/null &
로 변경해 $1 &
도 출력은 변경되지 않습니다. just를 사용하면 $1
경로를 인쇄한 후 출력이 중지되고 명령이 완료됩니다.
한 시간 동안 더듬은 끝에 문제의 바이너리에 실행 권한이 없다는 사실을 발견했습니다.rwxr--r--
오류가 표시되지 않는 이유는 무엇입니까? 오류를 표시하려면 어떻게 해야 합니까? 프로세스가 실제로 시작되지 않는 경우 스크립트가 PID를 가져오는 이유는 무엇입니까? 음...분명히요. 프로세스가 시작되면 해당 프로세스와 표준 오류는 어떻게 되나요?(즉, 왜 볼 수 없나요?)
답변1
라인 바로 뒤에
echo "Good ´ol printf-debugging in 2022"
당신은 추가해야
COM=`echo "${1}" | awk '{ print $1}' `
test -x "${COM}" || ( echo "\t ERROR: '${COM}' is not executable! ; exit 1 )
이렇게 하면 필수 전제조건 없이 호출 스크립트가 진행되지 않습니다.
그리고 라인도 참고해주세요
ExitStatus=$?
$1의 종료 상태를 캡처하지 마세요., 그러나 경험상 해당 명령줄을 백그라운드에 배치하는 성공/실패는 거의 항상 0입니다. 백그라운드 프로세스의 실제 반환 코드를 얻으려면 다음을 참조하십시오.회신하다.