Любой может сообщить мне возможные коды возврата для команды rm -rf, отличные от нуля, т. Е. Возможные коды возврата для случаев сбоя. Я хочу узнать более подробную причину сбоя команды, в отличие от просто сбой команды (возврат, отличный от 0).
Любой может сообщить мне возможные коды возврата для команды 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намеренно подавляет большинство ошибок
perror. В моей системе он поставляется с MySQL.
straceсообщает вам, если системный вызов завершился неудачно, но если вы не посмотрите на источник, вы не будете знать, как системный вызов относится к состоянию завершения программы (например, если вы запускаете -f, ENOENTподавляется). Следовательно, это не имеет отношения здесь
схватил 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
довольно простой.
ссылка:
0 / >0.
I want to know more detailed reason for the failure of the command unlike just the command is failed(return other than 0)так что отрицательные голоса понятны.
if (!(flags & FILEUTILS_FORCE)) {добавления, else{printf("same error message as perror");}я уверен, что другие реализации будут быть похожим, но в противном случае версия busybox могла бы быть построена сама по себе и включена.
man lsв Ubuntu, это объясняет причину ненулевого статуса выхода