输入 \ 后终端显示 >

输入 \ 后终端显示 >

当我按下反斜杠时\,会出现一个>(大于)符号。这是什么意思?

答案1

每当使用命令行时,可能会出现需要运行很长的命令的情况。因此,您需要将命令拆分为多行,以提高可读性和理解性。但是,如果您使用由 键入的换行符Enter,shell 会认为这是一个新命令。因此,您使用 ,然后\跟上换行符。

基本上,命令或 bash 脚本是“解释”的,即逐行执行。每个新行都意味着一个新命令的开始。在终端中,当您按下 时Enter,您会得到一个运行新命令的提示。因此,新行需要“转义”。输入\后跟Enter可以将当前命令拆分为多行,这样 shell 就不会认为它是一个新命令,而是前一个命令的延续。

>只是提示输入下一行命令而已。

例如:
如果我们要安装多个包,命令如下

$ sudo apt install [package1] [package2] [package3] ...

但有时,这会使命令变得混乱。因此,我们可以使用\后跟Enter(换行符)

$ sudo apt install [package1]\
> [package2]\
> [package3]\
> ...

答案2

反斜杠字符 ( \) 用作转义字符在 shell 中。如果您将其用作行中的最后一个字符,它将转义换行符,因此您可以在下一行继续执行命令,而不是结束它。Bash>中的提示符会指示这一点。

例子:

$ echo A\
> B
AB
$

要将文字放入\命令中,必须使用另一个反斜杠将其转义:

$ echo \\
\
$

答案3

[添加一个(太长/太复杂)的答案,因为其他两个答案没有提到“>”是如何出现的……即没有提到 PS2]

您输入的是:\ [Enter]

\对 shell说输出作为[Enter]文字换行符,而不是照常解释(因此 shell 会“转到下一行”而不是终止当前命令行并解释它。除非您处于其他一些构造中,例如 heredoc、for 循环等)。

因此,您的终端将:解释\ [Enter]为:“转到下一行”(而不开始解释命令),因此终端现在允许您输入多行命令的第二行,并使其更明显地显示内容$PS2(称为PS2 提示) 在每个后续行上。

PS2变量通常默认定义为:PS2="> "例如编辑你的〜/ .bashrc按照您的意愿重新定义它(考虑到它应该,imo,避免包含危险字符,例如>;,而应该帮助您清楚地看到它是一个多行命令,但禁用它的多行内容(例如PS2="#cont# ":)或尽可能“透明”并让您轻松复制/粘贴多行命令,尽可能减少对其行的影响(例如:PS2=" ",甚至PS2=""

在我看来,的默认值PS2="> "是错误的:它可能导致您复制粘贴一个多行命令,根据行被剪切的位置,最终可能会得到包含`>somethingimportant'的行,可能会破坏文件或更糟的情况......

您可以(也许应该)将 PS2 重新定义为其他内容(例如,我喜欢:PS2=" "),以便可以轻松复制/粘贴多行命令,而不必担心以下情况:

例如,假设您有一个很长的命令(如果您的终端不够宽,它可能会在您的屏幕上折叠):

grep -i "something"  /some/file  /another/file /3rd/file /etc/someimportantfile 

\ [Enter]如果命令看起来太长(并且环绕),您可能需要将其在视觉上分成两行,通过在适当的位置插入:来选择下一行的位置(时间) :

grep -i "something"  /some/file  /another/file /3rd/file \
> /etc/someimportantfile #warning, "> " was inserted by the shell and this changes everything !

使用默认的 PS2,shell>在“/etc/someimportantfile”之前添加。因此,如果你在另一个终端中复制/粘贴这两行,它们的操作将完全不同:grep 不会进入 4 个文件,而是只进入前 3 个文件,然后 grep输出替换第 4 个文件 (/etc/someimportantfile) 的内容!

为了避免这些问题(以及许多其他问题):您可以例如定义:PS2=" "使多行命令更简洁,更容易复制/粘贴:

grep -i "something"  /some/file  /another/file /3rd/file \
  /etc/someimportantfile #now only 2 spaces were inserted, without changing the grep's actions!

请注意,这次/bin/somecommand只是向右移动了 2 个空格,并没有>插入任何内容,因此您可以安全地复制/粘贴这两行命令。

PS2 也用于“for”、“while”等循环中,对我来说,将其定义为“ ”在这些循环中也更好。

PS2=""更加透明,并允许您选择在随后的每一行上想要使用的标识。

相关内容