当我 grep 没有特定文件时终端停止工作

当我 grep 没有特定文件时终端停止工作

我正在学习如何使用 shell。在使用一些基本命令时,我遇到了一个问题。这是非常基本的东西,如果让某些人感到不快,我深表歉意。

我的桌面上有一个名为“myFirstShellScript.txt”的文件。该文件中有一行文本“show system”。

因此,如果我在打开 shell 后输入cd desktop,然后 grep,"show system" myFirstShellScript.txt"shell 将返回该字符串出现的句子。很好。

但我想乱搞一下。然后我输入grep "show system"并按回车键。我想知道 grep 是否会搜索整个桌面,因为那是我的密码。

但似乎发生的事情是终端停止了工作。起初我以为它可能只是在忙于搜索,但已经有一段时间了。然后我检查了其他命令是否可以工作 - pwd - 什么也没做,当我按下回车键时,光标只是移动到新行。

然后我尝试退出。我尝试了“exit”、“end”和“quit”。什么都没有。终端窗口没有按预期响应。

我知道我可以轻松打开另一个选项卡,但想问我对这里的终端做了什么?

答案1

当您运行 时grep,如果您包含文件名 ( grep pattern file),它会搜索该文件。如果不包含,它会搜索标准输入 (stdin)。如果您将其包含在管道 ( foo | grep) 中,它会从管道读取。当您只运行 时grep pattern,它会从控制台读取输入。这是 Unix 和 Linux 实用程序中非常常见的模式。当您输入exitendquit或其他任何内容时,它会将其与模式进行比较,如果匹配,则打印出来,就像您给了它一个文件一样。尝试输入与模式匹配的一行 - 您会看到它回显给您。

为了摆脱这种情况,请按Ctrl+D来表示文件结束。Ctrl+C可以终止大多数程序,但是不如Ctrl+干净D

答案2

不带任何参数的 grep 会从标准输入(即您的终端)读取。它会一直读取,直到遇到文件结束符。文件结束符是Ctrl-D。输入这个字符,grep 就完成了。

如果这不起作用,请运行stty -a并寻找eof = ...以找到您的 eof 字符。

警告:不要输入Ctrl-D两次;第二个命令将被你的 shell 读取。如果这是你的登录 shell,它会认为你已完成并退出。每当你的登录 shell 退出时(就像你输入 时一样exit),你的登录会话就结束了,login:提示符会再次出现。换句话说,你已注销。

相关内容