当我键入命令并且终端什么都不做时,这是什么意思?

我是Linux新手(我正在运行Ubuntu)。 我正在为终端学习新的命令,甚至关于如何做东西的一些指南/论坛。 有时我会输入一个命令,然后终端在我键入的最后一个命令之后创建一个换行符,然后用一个闪烁的光标。

有时我认为计算机只是在思考并需要时间来做某事(尽管对某一特定任务有某种进展表示会很好)。 有时终端进展让我输入一个新命令,有时我等待几分钟,然后按ctrl + c停止它正在做的事情。

很高兴知道我在这里处理的是什么,所以我可以更好地判断我是应该等待还是只是浪费时间。

我引用Eric S. Raymond的“Unix编程艺术”

沉默规则:当一个程序没有什么令人惊讶的说法时,它应该什么都不说。

Unix最古老,最持久的设计规则之一是,当一个程序没有任何有趣或令人惊讶的说法时,它应该闭嘴。 表现良好的Unix程序可以不引人注目地完成工作,只需要少量工作和麻烦。 沉默是金。

这种“沉默是黄金”的规则最初是由于Unix早于video显示而发展起来的。 在1969年的慢速打印终端上,每行不必要的输出严重消耗了用户的时间。 这种限制已经消失,但仍然存在简洁的绝佳理由。

我认为Unix程序的简洁性是该风格的核心特征。 当程序的输出成为另一个输入时,应该很容易找出所需的位。 而对于人来说,这是人为因素的必要性 – 重要的信息不应与内部程序行为的冗长相混淆。 如果所有显示的信息都很重要,则很容易找到重要信息。

– 肯阿诺德

精心设计的程序将用户的注意力和注意力视为宝贵而有限的资源,只有在必要时才会声明。

当然,许多程序都不遵守这个规则,答案实际上取决于特定的程序。

有些命令不会在标准和错误输出上打印任何内容。

但他们相应地设置了返回码。 任何命令的返回码都可以通过$?来访问$? 执行命令后的变量。 如果为0,则命令成功运行。 如果它是大于0的值,则发生错误。

在脚本中使用这些命令非常方便,因为您只需执行以下操作:

 command && echo "Returned an OK status" || echo "Returned an non-OK status" 

或者,根据返回的状态采取更多操作:

 command if [ $? == 0 ]; then # code to be executed when the command was executed successfully else # code to be executed when the command was not executed successfully fi 

在其他情况下,这是命令用来告诉某些事情是否被启用的方式,例如selinuxenabled命令,如果SE(安全增强版)Linux被激活则返回0,如果不激活则返回1。