Answers:
实际上,shell要求输入完整的命令/表达式,因此显示PS2
提示字符串。
来自man bash
:
提示
当以交互方式执行时,bash在准备读取命令时显示主要提示PS1, 在需要更多输入来完成命令时显示次要提示PS2。
在此之前:
PS2 The value of this parameter is expanded as with PS1 and used as the secondary prompt string. The default is ``> ''.
因此,正如您从阅读文档中可能会猜到的那样,shell具有多个具有不同用途的提示。该PS1
提示是你的root@sai:~#
字符串,当你输入命令通常出现。>
是PS2
提示。还有其他功能:PS3
用于select
命令块和PS4
使用set -x
命令进行调试。在这种情况下,我们对会更感兴趣PS2
。
shell可以通过多种方式显示PS2
提示(并且可能需要在新行上完成命令)。执行here-doc
重定向时会使用相同的提示(在此示例中,看到终止字符串时,命令被视为完整EOF
):
$ cat <<EOF
> line one
> line two
> EOF
line one
line two
通常,可以通过添加\
和即时(!)换行符来延续冗长的命令,这将导致出现相同的提示:
$ echo Hello\
> World
HelloWorld
$ echo 'Hello\
> World'
Hello\
World
当管道,逻辑运算符或特殊关键字出现在命令行的换行符之前时,在输入所有最终语句之前,该命令也被认为是不完整的:
$ echo Hello World |
> wc -l
1
$ echo Hello World &&
> echo "!"
Hello World
!
$ for i in $(seq 1 3); do
> echo "$i"
> done
1
2
3
$ if [ -f /etc/passwd ]
> then
> echo "YES"
> fi
YES
在您的特殊情况下,单引号意味着对单引号之间的含义的字面解释。因此,正如Zanna所指出的,您正在输入一个包含换行符+ ls
+换行符的命令。找不到这样的可执行文件名(通常命令文件名应仅由字母数字字符以及下划线,破折号和点组成)。尽管确实可以使用其中包含特殊字符的文件名,但始终避免这样做。
注意:示例中所示的行为特定于类Bourne的shell,包括bash
,dash
(在Ubuntu上符号链接到/bin/sh
)ksh
,和mksh
。csh
及其派生词的行为不这样:
$ tcsh
eagle:~> '
Unmatched '.
eagle:~> csh
% '
Unmatched '.
%
但是,在交互模式下,当需要更多输入时,它csh
仍将显示?
为提示2:
$ csh
% foreach n ( 1 2 3 )
? echo $n
? end
1
2
3
What's the difference between <<, <<< and < < in bash?
离线/错误。