8

Любой может сообщить мне возможные коды возврата для команды rm -rf, отличные от нуля, т. Е. Возможные коды возврата для случаев сбоя. Я хочу узнать более подробную причину сбоя команды, в отличие от просто сбой команды (возврат, отличный от 0).

2 ответа2

8

Чтобы увидеть код возврата, вы можете использовать echo $? в баш.

Чтобы увидеть реальное значение, некоторые платформы (например, Debian Linux) имеют двоичный файл perror , который можно использовать следующим образом:

$ rm -rf something/; perror $?
rm: cannot remove `something/': Permission denied
OS error code   1:  Operation not permitted

rm -rf автоматически подавляет большинство ошибок. Наиболее вероятная ошибка, которую вы увидите, это 1 (операция не разрешена), которая произойдет, если у вас нет прав на удаление файла. -f намеренно подавляет большинство ошибок

2

схватил 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() и узнать, как они происходят в потоке процесса, попробуйте

openfly@linux-host:~/ $ strace rm -rf $whatever 

довольно простой.

ссылка:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .