Any one can let me know the possible return codes for the command rm -rf other than zero i.e, possible return codes for failure cases. I want to know more detailed reason for the failure of the command unlike just the command is failed(return other than 0).
To see the return code, you can use
echo $? in bash.
To see the actual meaning, some platforms (like Debian Linux) have the
perror binary available, which can be used as follows:
$ rm -rf something/; perror $? rm: cannot remove `something/': Permission denied OS error code 1: Operation not permitted
rm -rf automatically suppresses most errors. The most likely error you will see is
1 (Operation not permitted), which will happen if you don't have permissions to remove the file.
-f intentionally suppresses most errors
grabbed coreutils from git....
looking at exit we see...
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);
Now looking at the status variable....
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);
looks like there isn't much going on there with the exit status.
I see EXIT_FAILURE and EXIT_SUCCESS and not anything else.
so basically 0 and 1 / -1
To see specific exit() syscalls and how they occur in a process flow try this
openfly@linux-host:~/ $ strace rm -rf $whatever