$ status在C shell中引用了什么?

时间:2017-01-17 18:18:27

标签: c shell csh

我正在尝试重新创建一个像tcsh这样的基本C Shell,但我已经理解了变量$status。这是tcsh中的状态示例:

存在的命令:

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

不存在的命令:

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

状态值是指什么?从tcsh返回值?

1 个答案:

答案 0 :(得分:2)

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

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

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);
}