在shell环境下,应用程序的交互只有输入和输出。与图形化界面相比其交互形式单一,无法实现各种丰富的交互模式,唯一提升交互体验的方式就是更好地格式化标准输出。但是,多样的交互方式对人来说是友好的,对计算机来说并不友好。如果你想实现程序的自动运行,在shell环境下是非常容易实现的。因为你可以通过获取标准输出提取关键信息的方式来完成。但是在图形化界面的情况下,其处理将会变得异常困难。你不易传递如下信息(先点击那个按键,再点击哪个选择框,如果出现异常某个图标会变成红色,再怎么处理)。所以shell在自动化处理,也就是其可编程性方面还是有其独特优势。 shell应用程序设计之初就是为了更好的链接在一起工作,而不是独立存在的。其链接工作的基石便是对标准输入的约定。一般的shell应用程序都会将输入指定为标准输入,其结果输出至标准输出,这是一种约定。当shell应用程序这样完成时,我们便可以通过管道和重定向来实现应用程序之间的交互。 也就是说如果你写了一个应用程序,会将输出输出至固定的文件。那么这个程序将很难与其他shell程序组合在一起,必须通过额外的处理来完成,例如通过cat将其转换到程序的标准输出,在进行处理。 这也就是为什么会存在cat,head,tail此类的程序。一方面他能显示文件内容,另一方面它能够将文件内容导出到程序的标准输出供进一步处理。