rm -rf 리턴 코드 있습니다. 즉, 실패 사례에

어느 누구도 제로 이외 의 명령 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

상당히 간단합니다.

심판 :

http://www.unix.com/man-page/Linux/EXIT_FAILURE/exit/


답변