kod*_*r16 6 shell operating-system
在 C 和许多其他语言中,0 表示 false,1(或非零)表示 true。在 shell 中,进程状态的 0 表示成功,非零表示错误。Shell if 语句本质上使用 0 表示 true。为什么第一个 shell 的作者决定使用 0 表示 true?
OP询问有关
为什么第一个 shell 的作者决定使用 0 表示 true?
简短的回答: 不可能以这种形式回答这个问题,因为第一个 shell没有任何退出状态。
因为@John Kugelman 要求总结,所以这个答案有点长。
第二个、第三个和第 N 个 shell 也没有任何可以称为“退出状态”的东西。对于近似的正确答案,需要深入历史。
shell是由“Louis Pouzin”发明的“RUNCOM”工具,在 MIT 的兼容分时系统中 阅读了有关 CTSS 的内容,其中写道:
Louis Pouzin 还为 CTSS 发明了 RUNCOM。该工具是 Unix shell 脚本的直接祖先,允许用户通过参数替换创建要执行的命令的文件系统文件。Louis 还为 Multics shell(Unix shell 的祖先)进行了设计。
另请阅读此页。
“下一个级别”是 Multics,称为Multics 命令语言:
命令语言解释器(Shell)通常由监听器驱动。
它的功能是监听在用户控制台输入的命令行形式的请求。在上面的命令语言描述中,侦听器从控制台读取一行,将该行计算为命令,然后重新调用自身以重复该函数。
它没有任何可以称为“退出状态”的东西。
程序调用terminate{file/process} procedure,停止程序执行。
这是最重要的一点之一。需要区分
exit(N)实际上您调用了库函数,什么使桥接至底层操作系统并正确终止程序。这意味着“exit(N)”(从退出函数的角度来看)是操作系统实现相关的。
参见维基百科waitpid系统调用或等效函数返回的值。
维基百科。waitpid 之类的函数通常返回前一点的退出状态,但它与操作系统实现相关。(ofc,现在由 POSIX 标准化)。回到历史:
Multics 之后,UNIX 得到了发展。从本页来看
,shell我们今天知道有两个前身:
如果有兴趣,请阅读手册 - 链接位于此处。
第一次提到“退出代码”是在 PWB(又名 Mashey)Shell 手册中。所有“之前”的 shell 只讨论:
终止报告
如果命令(后面不跟“&”)异常终止,则会打印一条消息。(除了退出和中断之外的所有终止都被视为异常。)
因此,问题的答案在上面几行中, - 与评论中已经说过的一致:
来自PWB 外壳手册的精彩引用
$r 是前面命令的退出状态代码。“0”是大多数命令的正常返回。
注意:大多数这个词。:),例如,它不是某人在“某一时刻”发明的,而是随着时间的推移而演变的。它非常紧密地依赖于底层操作系统中的exit和调用的实现。wait-like
例如,UNIX 的第一个版本对级别一无所知exit(N)- 它很简单exit()并且wait没有返回特定值 -来自Unix 程序员手册第一版,日期为 1971 年 11 月 3日
exit是终止进程的正常方式。所有文件都会关闭,并且如果父进程正在执行等待,则会收到通知。
wait导致其调用者延迟,直到其子进程之一终止。如果任何孩子已经死亡,则立即返回;如果没有子项,则立即返回并设置错误位。
另外,请阅读这里 - 真正值得 - Unix 分时系统的演变fork- 关于、和...exec的演变exitwait
V7 将退出状态标准化为:
简单命令的值是其退出状态(如果正常终止)或 200+status(如果异常终止)(有关状态值列表,请参阅 signal(2))。
还:
诊断 shell 检测到的错误(例如语法错误)会导致 shell 返回非零退出状态。如果 shell 正在以非交互方式使用,则 shell 文件的执行将被放弃。否则,shell 返回最后执行的命令的退出状态(另请参见 exit)。
Howg..天哪...有人可以很好地编辑这篇文章并纠正我蹩脚的英语和/或扩展/纠正上面的内容...
最后 - 对不起各位 - 完全是这个主题 - 但无法抗拒添加历史记录中的以下图像- 没有多少当前用户知道 Microsoft-XENIX。;)

| 归档时间: |
|
| 查看次数: |
1464 次 |
| 最近记录: |