$status 在 C shell 中指的是什么?

What does $status refer to in a C shell?

我正在尝试重新创建像 tcsh 这样的基本 C Shell,但我正在理解变量 $status。这是 tcsh:

中的状态示例

一个存在的命令:

$> pwd
/home/user
$> echo $status
0

一个不存在的命令:

$> foo
foo: Command not found.
$> echo $status
1

状态值指的是什么? Return 来自 tcsh 的值?

$status$?表示之前启动命令的退出状态。更准确地说,是子进程的退出状态。因为在不存在的命令的情况下,有一个分叉子 shell,但它无法 exec() 命令。

Shell 通常会启动这样的命令:

int pid = fork();
if (pid == 0) {   /* Child shell process */
    /* Try to replace child shell with cmd, in same child PID */
    /* cmd will generate the exit status of child process */
    execve(cmd, argv, envp);

    /* If execve returns, it's always an error */
    /* Child shell generates exit status for error */
    write(2, "command not found\n", 18);
    exit(127);
} else {          /* Parent shell process */
    /* Original shell waits for child to exit */
    int status;
    wait(&status); /* Assuming only one child */

    /* this is accessible in shell as $status or $? */
    status = WEXITSTATUS(status);
}