请不要让实用程序的行为取决于调用它所使用的名称。有时将实用程序链接到不同的名称是有用的,并且这不应改变它的行为。因此,如果您将 foo 链接到 ls,则无论使用哪个名称调用该程序,其行为都应相同。
相反,请使用运行时选项或编译开关或两者来选择备用行为。您也可以构建程序的两个版本,具有不同的默认行为,并将它们安装在两个不同的名称下。
同样,请不要让命令行程序的行为取决于它作为标准输出或标准输入获得的输出设备类型。设备独立性是系统设计的重要原则;不要仅仅为了节省某人偶尔输入选项而损害它。(在使用终端时,错误消息语法的变化是可以接受的,因为这是一个人们不依赖的次要问题。)
如果您认为当输出到终端时一种行为最有用,而当输出到文件或管道时另一种行为最有用,那么通常最好将默认行为设置为对终端输出有用的行为,并提供另一个行为的选项。您也可以构建具有不同名称的两个不同版本的程序。
某些情况下输出为二进制数据的程序除外。将此类输出发送到终端是无用的,并且可能会引起麻烦。如果此类程序通常将其输出发送到标准输出,则在这些情况下,它应检测到输出是终端,并改为给出错误消息。-f
选项应覆盖此异常,从而允许输出转到终端。
兼容性要求某些程序依赖于输出设备的类型。如果 ls
或 sh
没有按照所有用户期望的方式这样做,那将是灾难性的。在某些情况下,我们会为程序补充一个首选的替代版本,该版本不依赖于输出设备类型。例如,我们提供了一个 dir
程序,它很像 ls
,只是它的默认输出格式始终是多列格式。