任何人都可以让我知道该命令的可能返回代码射频除零以外的其他值,即失败情况的可能返回代码。我想知道命令失败的更详细原因,而不仅仅是命令失败(返回除 0 以外的值)。
答案1
要查看返回代码,您可以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
有意抑制大多数错误
答案2
从 git 抓取 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
相当简单。
參考文獻: