为什么有时在终端中反复提示我“>”?


19

好的,当我以错误的方式运行某些命令时(拼写错误等),终端输出以下内容:>而不是computername:workingfolder username$,当我键入Enter时,它的显示方式如下:

>

>

>

那就是如果我按Enter 3次。

Answers:


43

> 是默认的继续提示。如果之前输入的内容带有不平衡的引号,您将看到该内容。

例如,在命令行上键入单引号,然后输入几个enter键:

$ '
> 
> 
> 

持续提示会一直出现,直到您

  • (a)用引号引起来的命令

    要么

  • (b)输入Ctrl+ D以结束输入,这时外壳将响应一条有关不平衡引号的错误消息,

    要么

  • (c)输入Ctrl+ C,这将中止您输入的命令。

这有什么用

有时,您可能需要输入包含嵌入式新行的字符串。您可以按照以下步骤进行操作:

$ paragraph='first line
> second line
> third line
> end'

现在,当我们显示该shell变量时,您可以看到提示消失了,但是换行符得以保留:

$ echo "$paragraph"
first line
second line
third line
end

16

如果命令中的引号未结束,则会发生这种情况。就像这样:

$ echo "test here
>
>
...

您可以通过关闭引号来退出该模式(写一个"',或其他任何打开的引号)。它也可以是用大括号分隔的块,部分完成的for-dowhile-do循环的或某些其他构造。您也可以按Ctrl-C取消此命令(然后按Up修改)。

参数历史记录扩展发生在您未曾期望的地方时,有时可能会在没有明显的引号的情况下发生。


>是你的PS2(“二次提示”)值。您可以将其更改为其他内容,以提醒您发生了什么事情:

PS2="Unclosed >"

.bashrc将使其打印Unclosed >在每行的开头。



7

答案在于《Bash参考手册》中的这个隐秘提及:

5.1 Bourne Shell变量

[...]

  • PS1:主要提示字符串。默认值为“ \s-\v\$”。有关显示之前已展开的转义序列的完整列表,请参见打印提示PS1
  • PS2:辅助提示字符串。默认值为“ >”。

…… 其次

6.3.3交互式Shell行为

  1. Bash会PS1在读取命令的第一行PS2之前展开并显示,在读取多行命令的第二行及后续行之前会展开并显示。

因此,>如果您按,Enter并且Bash确定该命令不完整,则会出现提示。那可能是因为:

  • 在换行符之前的字符是a \,它被视为行的延续
  • 您有一个不完整的字符串(不匹配的报价或无终端这里-DOC)或其他一些不匹配的分隔符,如$()()``
  • 您已经启动了函数定义,for循环,while循环或case

如果由于意外输入错误而看到辅助提示,请单击ControlC以返回到主提示。


当您在此处输入文档时,您还会收到辅助提示。但这比其他情况更不可能偶然发生。
Barmar 2014年

6

等待您完成命令的shell。也许某处有一个未封闭的引号,或者它认为您正在启动“ for”循环并等待用户完成输入

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.