我正在尝试重新创建一个像tcsh这样的基本C Shell,但我已经理解了变量$status
。这是tcsh
中的状态示例:
存在的命令:
$> pwd
/home/user
$> echo $status
0
不存在的命令:
$> foo
foo: Command not found.
$> echo $status
1
状态值是指什么?从tcsh返回值?
答案 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); }