请注意我不问如何。我已经知道诸如pv
和的选项rsync -P
。
我想问为什么cp
至少不将进度条实现为标志?
请注意我不问如何。我已经知道诸如pv
和的选项rsync -P
。
我想问为什么cp
至少不将进度条实现为标志?
Answers:
Unix工具的传统是仅在出现问题时才显示消息。我认为这是出于设计和实际原因。该设计旨在在出现问题时将其变得显而易见:您会收到一条错误消息,并且不会淹没在没有实际信息的消息中。实际的原因是,在Unix成立之初,仍然有电传印刷机。也就是说,程序的输出将打印在纸上,而您不想打印进度条。
不管是什么原因,unix世界都只保留有用消息的传统。现代工具有时会引入进度条。在rsync的情况下,主要动机是rsync通常是通过网络执行的,并且网络比本地磁盘更加脆弱,因此进度条更加有用。相同的推理适用于wget。
cp
可以追溯到20世纪70年代初:这回合的传统,你可以得到。
dd
给出进度说明呢?dd
可以追溯到1966年(OS / 360)。如果用户希望Unix工具过于冗长,则Unix工具可能很冗长,但是不幸的是,您无法说出cp的冗长程度(只有一个额外的冗长程度:)-v
。
dd
在很多方面都有其独特之处(最明显的是,它的选项语法),因为它不是来自unix,而是IBM工具的一个克隆。另外,它通常用于磁带上的长任务,因此它的消息告诉您从休息中回来,这与cp
大多数情况下只是眨眨眼并提示您回来的情况不同。
在Unix世界中,每种工具都旨在完成一项工作并做好。如果已经有cp
其他工具,为什么还要担心输出进度pv
呢?同样,为什么这么多程序没有分页地将内容转储到屏幕上呢?因为已经有用于该工作的工具,例如more
(或less
)。为什么大多数需要编辑文件的程序都不向您提供编辑器,而是外包给您$EDITOR
?因为这使每个人都可以完成他们设计要执行的一项任务,并且用户可以使用自己喜欢的编辑器来完成所有任务。
切线地,大多数外壳程序被设计为将其输出通过管道传递到其他外壳程序中。它们可能给出的唯一输出是可以在链中的下一个命令中解析出来的东西。像这样cp
的程序既可以在脚本中使用,也可以从终端手动使用,因此其输出集中在退出代码和失败或成功的文件列表上。
总是期望结合使用各种工具来达到您想要的效果。
pv
当存在cp
写?这是一个好点,但是我有一种感觉,在这种情况下,cp
本来是故意编写的,没有进度输出,与其他工具无关,只是您和Gilles引用的其他原因。
cp
在第一次编码时采用一种方式的历史问题。问题是为什么现在这样。已经有很多年了,有人可以添加功能,但显然已经决定不这样做。我确信其他工具的可用性会影响这一决定。
这是边际事物之一,其中有支持和反对向cp添加进度条选项的参数。反对的主要观点是,您可能不会提前知道自己想知道进度。为此,BSD上提供了Ctrl-T / SIGINFO,如果GNU / Linux平台上提供了Ctrl-T / SIGINFO,则可能有更多原因触发cp中的进度条逻辑。同时,更通用的解决方案是使用诸如Coreutils Progress Viewer(以前称为)之类的progress
cv
单独工具来显示系统上任何进程的状态。