终端显示>后输入\


Answers:


35

每当您使用命令行时,当您需要运行一个很长的命令时,可能会出现一个实例。因此,您希望将命令分成多行以更好地阅读和理解。但是,如果您使用由键入的换行符Enter,则shell会认为这是一个新命令。因此,您使用\后跟换行符。

基本上,命令或bash脚本是“解释”的,即逐行执行。每行都表示新命令的开始。在终端中,按时Enter,会提示您运行新命令。因此,需要“换行”新行。键入\后跟Enter可以让您将当前命令分成多行,因此外壳程序不认为这是新命令,而是上一条命令的延续。

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

例如:
如果我们要安装多个软件包,该命令将类似于

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

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

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

4
@Curiouskangaroo顺便说一句,您可以通过将值设置为和变量来控制新命令行继续提示的工作方式。请参阅bash手册页以了解格式,并用于查看当前设置。$PS1$PS2echo "'$PS2'"
jpaugh

14

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

例:

$ echo A\
> B
AB
$

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

$ echo \\
\
$

7

[添加(太长/太复杂)答案,其他2个则不提及“>”的显示方式...即,不提及PS2]

您输入了::对shell \Enter\says只是将其作为文字字符输出Enter而不是像往常那样解释(因此,shell“转到下一行”而不是终止当前命令行并对其进行解释。除非您位于其他结构,例如heredoc,for循环等)。

因此,您的终端将解释\Enter为:“转到下一行”(无需开始解释命令),因此终端现在允许您输入多行命令的第二行,并使其更加可见以显示$PS2内容(在随后的每一行中称为PS2提示符)。

PS2变量通常是默认定义是:PS2="> "你可以为为例编辑你的〜/ .bashrc如你所愿(考虑到重新定义它,它应该,国际海事组织,避免含危险字符,如>;,并且应该帮助你要么清楚地看到它是一个多行命令,但禁止它的多内容(例如:PS2="#cont#")用或让你轻松复制/粘贴它们作为其线条尽可能小的影响(例如:PS2=" "

顺便说一句,这是imo不好的默认设置,因为在某些情况下,它很可能导致人们删除一些重要的二进制命令。

您可以将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” ..之前添加了“>”,因此,如果将这2行复制/粘贴到另一个终端中,它们的操作将完全不同:grep不会将其grep分成4个文件仅进入前三个文件,并且grep 输出将替换第四个文件(/ 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个空格,而没有插入“>”,因此您可以安全地复制/粘贴此2行命令。

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

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.