当我输入命令但终端不执行任何操作时,这意味着什么?

当我输入命令但终端不执行任何操作时,这意味着什么?

我是 Linux 新手(我正在运行 Ubuntu)。我正在学习终端的新命令,甚至关注一些有关如何操作的指南/论坛。有时我会输入一个命令,终端会换行,然后在我输入的最后一个命令后停留在一个闪烁的光标上。

有时我认为计算机只是在思考,需要时间去做某件事(尽管如果能对给定任务的进度有所指示就更好了)。有时终端会继续运行,让我输入新命令,而有时我会等几分钟,然后按 ctrl+c 停止正在执行的操作。

我很高兴知道我在这里处理什么,这样我就能更好地判断我是否应该等待或只是浪费我的时间。

答案1

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

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

Unix 最古老、最持久的设计规则之一是,当程序没有有趣或令人惊讶的内容时,它应该保持沉默。行为良好的 Unix 程序会低调地完成工作,尽量减少麻烦和干扰。沉默是金。

“沉默是金”这一规则最初之所以出现,是因为 Unix 的出现早于视频显示器。在 1969 年缓慢的打印终端上,每一行不必要的输出都会严重浪费用户的时间。这一限制已经不复存在,但简洁的充分理由仍然存在。

我认为 Unix 程序的简洁性是其风格的一个主要特征。当你的程序的输出成为另一个程序的输入时,应该很容易挑选出所需的部分。对于人们来说,这是人为因素的必需品——重要信息不应与关于内部程序行为的冗长内容混杂在一起。如果所有显示的信息都很重要,那么重要信息就很容易找到。

——肯·阿诺德

精心设计的程序将用户的注意力和集中力视为宝贵而有限的资源,仅在必要时才被利用。

当然,许多程序并不遵循这条规则,答案实际上取决于具体的程序。

答案2

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

但是它们会相应地设置返回码。任何命令的返回码都可以$?在执行命令后立即通过变量访问。如果它是 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。

相关内容