无法理解bash命令

时间:2017-08-23 23:59:09

标签: bash

我试图设置一个程序,并在bash脚本中遇到了这一行。有人能告诉我它的作用吗?我对bash不太熟悉。

export PS1='\e[0;33mmyProject \e[0;32m\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$\e[0m '

非常感谢!

2 个答案:

答案 0 :(得分:1)

这个命令做了两件事。它设置终端窗口的标题,和 设置bash提示符。

export PS1='\e[0;33mmyProject \e[0;32m\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$\e[0m '

一块一块:

export PS1=

这将设置PS1变量,该变量包含bash提示符。

\e[0;33m

\e被转换为ESC字符(ascii = 0x1B),这是一个控制序列介绍器,表示ANSI Escape Code的开头。序列末尾的m字符表示[m之间的所有内容都将被解释为; - SGR分隔列表(选择图形再现)参数(有关详细信息,请参阅here)。 0清除所有以前的文字格式,33将文字颜色设置为黄色。

myProject

这只是将字符串myProject添加到bash提示符。

\e[0;32m

这将清除所有以前的文本格式(0)并将文本颜色设置为绿色。 (32)

\[ ... \]

\[开始一系列以\]结尾的非打印字符。这两个分隔符之间的所有内容都不会在提示符中显示。

\e]0;\u@\h: \w\a

这会将终端窗口的标题设置为

username@hostname: /current/working/directory

接下来的一点:

${debian_chroot:+($debian_chroot)}

如果已定义变量$debian_chroot,则此表达式将计算为$debian_chroot的值。

$debian_chroot/etc/bash.bashrc中设置的变量。 This post解释得比我好得多。

\u@\h:\w\$\e[0m

\u评估当前用户的用户名,\h评估计算机的名称,\w评估当前工作目录。 \$只是字符$。它需要进行转义,因为在bash脚本中,字符$表示以下字符是变量的名称。 \e[0m将文本格式恢复为默认值。

终端中提示的外观图像:What it would might like in a terminal

答案 1 :(得分:0)

这是一个非常复杂的命令!

让我们逐节分解。

export 

这意味着我们正在设置一个变量以用于其他程序。

PS1=

变量的名称是PS1。

\e

这是一个转义字符。在bash(和大多数编程语言)中,在它之前带有反斜杠的Everything是一个转义字符。它用于需要在空格中包含控制字符或控制键本身包含在字符串中时。当它被转义时,bash将其视为字符串的一部分,而不是另一个控制字符。

[

这是数组的开头。它与C程序中的数组非常相似。

;

这是一个结束角色,它可能意味着几个不同的东西。在这里,它被用来定义数组的一部分。

这里还有其他一些东西,但它主要只是数组中的数据。

:

这是一个NOT操作数。它用于确定某事物的倒数。

${debian_chroot:+($debian_chroot)}

这是一个变量。在bash中,变量以$。开头。

它使用变量debian_chroot并将其添加到自身,如果它不为null。

这个命令只是定义一个变量,在这个例子中是一个包含信息的数组,可能是关于一个带有debian安装的chroot。