答案1
跑步cat -- -
实际上与跑步相同cat
。被-
理解为标准输入,但cat
不带任何参数的默认行为是无论如何读取标准输入。至于重复的文本,这是终端在您键入(第一次)时回显您的输入,并且 cat 读取输入并将其打印到输出(这也是终端,因此第二次显示文本)。
要退出此操作,请CtrlD按新行。您还可以使用CtrlC发送 SIGINT 到cat
,导致它死亡。
-
要使用 来查看当前目录中调用的文件的内容cat
,请使用
cat ./-
答案2
我该输入什么或按什么才能摆脱这个“循环”?
穆鲁的回答已经提到您可以按 Ctrl-D 或 Ctrl-C 来摆脱这种情况,但值得记住的是,这些组合键可以让您摆脱这种情况几乎全部终端上出现不需要的情况,不仅仅是这个,还有为什么他们做他们所做的事。
- Ctrl-D 将 EOF(文件结尾)发送到当前程序。如果程序设计为从终端读取“直到 EOF”,然后退出(很多程序都是如此),那么 Ctrl-D 将使您退出。
cat
就是这样一个程序。 - Ctrl-C 发送中断信号到当前程序。这将要退出程序,除非该程序专门设计用于在中断时执行其他操作(或者它取决于某些第三方程序/库)。所以这通常比 Ctrl-D 更强大。除了使用的终端程序之外,很少有终端程序TUI(基于文本的用户界面),当您按 Ctrl-C 时不会立即退出。
- 还有 Ctrl-Z,它背景当前程序。这不会退出程序,但它(通常)会返回您的终端。就像 Ctrl-C 一样,程序可以覆盖它,但通常不会,除非它们使用 TUI。使用 Ctrl-Z 后,您可以通过输入 回到上次停止的程序
fg
。或者您可以使用ps -a
找到PID
错误进程的 ,然后kill -9 <PID>
完全摆脱它。 - 最后,如果这些都不起作用,但你使用的是 GUI,你可以打开第二个终端并使用
ps
andkill
那里,如上所述。
作为奖励,有时您最终会得到一个“部分”工作但无法正确显示的终端,或者当您确定已经摆脱了那个错误的程序时,它似乎什么也不做。在这种情况下,您可以尝试输入reset
(盲目地 - 并且不要忘记在最后按回车键)来恢复您的终端(它不会丢失任何数据,但它确实会执行诸如确保在以下情况下显示您的输入之类的事情:某些程序已将其关闭并且不再将其重新打开)。