为什么“假;回声$?” 返回 1,如果错误的 Solaris 源以 255 退出?

So_*_*_it 3 bash shell solaris opensolaris

我需要找到实现 false 的源代码。
我在github上找到了源代码并找到了false.c,其中 false 以代码 255 退出。
那么,为什么“false; echo $”会出现?在 shell 中返回 1 而不是 255?我想我错过了某个地方的来源。

false.c文件中的代码:

#pragma ident   "%Z%%M% %I% %E% SMI"

#include <unistd.h>

/*
 * Exit with a non-zero value as quickly as possible.
 */

int
main(void)
{
    _exit(255);
    /*NOTREACHED*/
    return (0);
}
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 13

如果 bash 是你的 shell,它false是一个内置的——所以你正在查看错误的源代码。

在文件中builtins/colon.def查看内置于 bash 本身的版本:

/* Return an unsuccessful result. */
int
false_builtin (ignore)
     char *ignore;
{
  return (1);
}
Run Code Online (Sandbox Code Playgroud)

如果您想使用操作系统供应商的版本false而不是内置版本,您可以使用command false或 来实现/bin/false

  • 二:一个是内置于 shell 中的,另一个是由操作系统作为外部二进制文件提供的。(如果您的系统上安装了多个 shell,它们每个都可能有不同的内置“false”;如果它是符合 POSIX 的 shell,唯一的保证是该行为将符合 https://pubs.opengroup .org/onlinepubs/9699919799/utilities/false.html,指定它必须返回“非零”值)。 (2认同)