어느 누구도 제로 이외 의 명령 rm -rf에 대한 가능한 리턴 코드를 알려줄 수 있습니다. 즉, 실패 사례에 대한 가능한 리턴 코드. 명령이 실패하는 것과 달리 명령이 실패하는 더 자세한 이유를 알고 싶습니다 (0 이외의 반환).
답변
리턴 코드를 보려면 echo $?
bash에서 사용할 수 있습니다 .
실제 의미를 확인하기 위해 Debian Linux와 같은 일부 플랫폼에는 perror
바이너리가 있으며 다음과 같이 사용할 수 있습니다.
$ rm -rf something/; perror $?
rm: cannot remove `something/': Permission denied
OS error code 1: Operation not permitted
rm -rf
대부분의 오류를 자동으로 억제합니다. 가장 많이 발생하는 오류는 1
(작업이 허용되지 않음)이며, 파일을 제거 할 권한이없는 경우에 발생합니다. -f
의도적으로 대부분의 오류를 억제
답변
자식에서 coreutils를 잡았습니다 ….
출구를 보면 …
openfly@linux-host:~/coreutils/src $ cat rm.c | grep -i exit
if (status != EXIT_SUCCESS)
exit (status);
/* Since this program exits immediately after calling 'rm', rm need not
atexit (close_stdin);
usage (EXIT_FAILURE);
exit (EXIT_SUCCESS);
usage (EXIT_FAILURE);
error (EXIT_FAILURE, errno, _("failed to get attributes of %s"),
exit (EXIT_SUCCESS);
exit (status == RM_ERROR ? EXIT_FAILURE : EXIT_SUCCESS);
이제 상태 변수를보고 있습니다 ….
openfly@linux-host:~/coreutils/src $ cat rm.c | grep -i status
usage (int status)
if (status != EXIT_SUCCESS)
exit (status);
enum RM_status status = rm (file, &x);
assert (VALID_STATUS (status));
exit (status == RM_ERROR ? EXIT_FAILURE : EXIT_SUCCESS);
종료 상태로 진행되지 않는 것 같습니다.
EXIT_FAILURE 및 EXIT_SUCCESS가 보이지만 다른 것은 없습니다.
기본적으로 0과 1 / -1
특정 exit () syscall과 프로세스 흐름에서 발생하는 방식을 보려면 다음을 시도하십시오.
openfly@linux-host:~/ $ strace rm -rf $whatever
상당히 간단합니다.
심판 :