Dis*_*ame 19 command-line shell bash prompt
好吧,当我以错误的方式运行某些命令时,(拼写错误等)终端输出这个:>
而不是computername:workingfolder username$
,当我输入时,它是这样的:
>
>
>
Run Code Online (Sandbox Code Playgroud)
如果我按回车键 3 次,那就是这样。
Joh*_*024 43
>
是默认的继续提示。如果您之前输入的内容具有不平衡的引号,您将看到该提示。
例如,在命令行上键入单引号,后跟几个enter
键:
$ '
>
>
>
Run Code Online (Sandbox Code Playgroud)
继续提示将出现,直到您
(a) 用右引号完成命令
或者
(b) 输入Ctrl+D以完成输入,此时 shell 将响应有关不平衡引号的错误消息,
或者
(c) 键入Ctrl+C这将中止您输入的命令。
有时,您可能想要输入一个包含嵌入新行的字符串。你可以这样做:
$ paragraph='first line
> second line
> third line
> end'
Run Code Online (Sandbox Code Playgroud)
现在,当我们显示该 shell 变量时,您可以看到提示消失了,但换行符保留了:
$ echo "$paragraph"
first line
second line
third line
end
Run Code Online (Sandbox Code Playgroud)
Mic*_*mer 16
如果您的命令中有未封闭的引号,就会发生这种情况。那是这样的:
$ echo "test here
>
>
...
Run Code Online (Sandbox Code Playgroud)
您可以通过关闭引用来退出该模式(写一个"
或'
,或任何您的开放引用)。它也可以是大括号分隔的块、部分完整for-do
或while-do
循环或某些其他结构。您也可以按Ctrl-C取消此命令(然后按Up进行修改)。
当参数或历史扩展发生在您没有预料到的地方时,有时会发生这种情况而没有明显丢失的引号。
这>
是您的PS2
(“辅助提示”)值。您可以将其更改为其他内容以提醒您发生了什么:
PS2="Unclosed >"
Run Code Online (Sandbox Code Playgroud)
在您的.bashrc
遗嘱中将其打印Unclosed >
在每一行的开头。
答案在于Bash 参考手册中的这个神秘提及:
5.1 Bourne Shell 变量
[...]
PS1
: 主要提示字符串。默认值为“\s-\v\$
”。有关在显示之前展开的转义序列的完整列表,请参阅打印提示PS1
。PS2
: 辅助提示字符串。默认值为“>
”。
……其次是:
6.3.3 交互式 Shell 行为
- Bash
PS1
在读取命令的第一行PS2
之前展开并显示,在读取多行命令的第二行和后续行之前展开并显示。
因此,>
如果您按Enter并且 Bash 确定命令不完整,则会出现提示。那可能是因为:
\
,它被当作一个行继续。$()
, ()
, ``
。for
循环、一个while
循环或一个case
.如果由于无意的输入错误而看到次要提示,请点击ControlC以返回到主要提示。