终端,不会执行任何命令,而是我输入的任何内容都会重复

kak*_*593 8 cat

我需要打开一个名为-. (我正在玩这个黑客游戏)
当我尝试使用 command 时cat -- -,在我输入该命令后,我输入的任何命令都不起作用,事实上,我输入的所有内容在我按 Enter 后都会重复。

我假设我进入了某种类型的循环或扩展命令模式或其他模式。

我该输入什么或按什么才能摆脱这个“循环”?

命令不断重复

需要明确的是,我输入了一次“hhel”,它出现了两次,我输入了一次“test”,正如您在照片中看到的,它在终端中显示了两次。

mur*_*uru 36

跑步cat -- -实际上与跑步相同cat。被-理解为标准输入,但cat不带任何参数的默认行为是无论如何读取标准输入。至于重复的文本,这是终端在您键入(第一次)时回显您的输入,并且 cat 读取输入并将其打印到输出(这也是终端,因此第二次显示文本)。

要退出此操作,请CtrlD按新行。您还可以使用CtrlC发送 SIGINT 到cat,导致它死亡。

-要使用 来查看当前目录中调用的文件的内容cat,请使用

cat ./-
Run Code Online (Sandbox Code Playgroud)


Kei*_*iji 12

我该输入什么或按什么才能摆脱这个“循环”?

muru 的回答已经提到您可以按 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并在那里使用kill,如上所述。

作为奖励,有时您最终会得到一个“部分”工作但无法正确显示的终端,或者当您确定已摆脱该错误程序时,该终端似乎什么都不做。在这种情况下,您可以尝试输入reset(盲目地 - 并且不要忘记在最后按回车键)来恢复您的终端(它不会丢失任何数据,但它确实会执行诸如确保在以下情况下显示您的输入之类的事情:某些程序已将其关闭并且不再将其重新打开)。

  • 无需查找后台进程的 PID,只需“kill %1” (4认同)
  • 还值得了解 Ctrl+\,它会发送 SIGQUIT。它仍然是可阻止的,但比 SIGINT 更不可能被阻止。 (3认同)