如何判定程序应设为Shell命令还是子程序?
如何判定程序是Shell命令还是子程序?
肯·汤普森(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie)在《UNIX程序员手册》中给出过基础定义:
命令是供用户直接调用的程序,与之相对的子程序则是供用户程序调用的。命令通常存放在
/bin目录下(针对二进制程序)。
核心判定维度
可以从以下几个实际场景和特性来区分设计方向:
- 调用对象:如果是给终端用户手动执行(比如在Shell里敲命令完成独立任务),就做命令;如果是给其他代码调用、作为功能组件,就做子程序。
- 交互逻辑:命令要适配人类用户——处理命令行参数、输出可读的文本结果、支持终端交互(比如提示输入);子程序则只需要给调用程序提供结构化接口(比如函数参数、标准返回值),不需要面向用户的交互。
- 部署方式:命令会放到
/bin、/usr/bin这类系统可执行路径,用户直接敲名字就能运行;子程序一般是库文件(如.so、.a)或语言模块,需要被其他程序链接、导入才能使用。 - 职责边界:命令负责完成完整的独立任务(比如
cp复制文件、curl请求网络);子程序专注单一可复用功能(比如哈希计算、字符串解析),是更大系统的组成部分。 - 错误处理:命令的错误信息要直白易懂,告诉用户哪里错了、怎么改;子程序的错误则以程序友好的形式返回(比如错误码、异常),让调用方代码能处理。
内容的提问来源于stack exchange,提问作者Roger Costello
相关产品推荐
相关产品推荐

