실행 권한 없이 바이너리를 실행하려고 할 때 표시되는 오류

실행 권한 없이 바이너리를 실행하려고 할 때 표시되는 오류

제대로 작동하지 않는 타사의 스크립트가 있습니다. 프로세스가 시작되어야 합니다. 실행 가능 경로와 해당 매개변수는 $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입니다. 백그라운드 프로세스의 실제 반환 코드를 얻으려면 다음을 참조하십시오.회신하다.

관련 정보