Любой может сообщить мне возможные коды возврата для команды rm -rf, отличные от нуля, т. Е. Возможные коды возврата для случаев сбоя. Я хочу узнать более подробную причину сбоя команды, в отличие от просто сбой команды (возврат, отличный от 0).
2 ответа
Чтобы увидеть код возврата, вы можете использовать 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
намеренно подавляет большинство ошибок
схватил 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
довольно простой.
ссылка: