2017-08-23 107 views
0

我試圖設置一個程序並在bash腳本中遇到這一行。有人能告訴我它的作用嗎?我對bash不是很有經驗。麻煩理解一個bash命令

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

非常感謝!

+0

請給一些背景,描述什麼是完整的腳本應該做的事。 – Yunnosch

回答

1

該命令執行兩項操作。它設置終端窗口的標題,並且 設置bash提示符。

export PS1='\e[0;33mmyProject \e[0;32m\[\e]0;\[email protected]\h: \w\a\]${debian_chroot:+($debian_chroot)}\[email protected]\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;\[email protected]\h: \w\a 

這臺終端窗口的東西的像

[email protected]: /current/working/directory 

標題中的下一個比特:

${debian_chroot:+($debian_chroot)} 

如果變量$debian_chroot已被定義,則此表達式會值爲$debian_chroot

$debian_chroot是設置在/etc/bash.bashrc中的變量。 This post解釋它比我更好。

\[email protected]\h:\w\$\e[0m 

\u計算結果爲當前用戶的用戶名,\h評估的計算機的名稱,並\w評估當前的工作目錄。 \$只是字符$。它需要被轉義,因爲在bash腳本中,字符$表示以下字符是變量的名稱。 \e[0m將文本格式恢復爲默認值。

什麼樣的提示可能看起來像在終端的圖像:What it would might like in a terminal

+0

這太棒了!感謝您提供這樣的詳細解釋。對此,我真的非常感激。 – AnnaR

0

這是一個相當複雜的命令,你在這裏!

讓我們一節一節地分解它。

export 

這意味着我們正在設置一個變量用於其他程序。

PS1= 

該變量的名稱是PS1。

\e 

這是一個轉義字符。在bash(以及大多數編程語言)中,所有帶有反斜槓的東西都是一個轉義字符。它用於需要將空間等控制字符或控制字符本身包含在字符串中的情況。當它被轉義出來時,bash將它看作是字符串的一部分,而不是另一個控制字符。

[ 

這是一個數組的開始。它與C程序中的數組非常相似。

; 

這是一個結束字符,它可以表示幾種不同的東西。在這裏,它被用來定義數組的一部分。

這裏還有一些其他的東西,但它主要是數組中的數據。

: 

這是一個非操作數。它用於確定某些事物的逆。

${debian_chroot:+($debian_chroot)} 

這是一個變量。在bash中,變量以$開頭。

它使用變量debian_chroot並將其添加到自身,如果它不爲null。

這個命令只是定義一個變量,在這種情況下是一個數組,其中包含的信息可能是關於一個debian安裝在其中的chroot。

+0

'$ {debian_chroot:+($ debian_chroot)}'實際上並沒有這樣做,請參閱https://askubuntu.com/questions/372849/what-does-debian-chrootdebian-chroot-do-in-my-terminal-提示 – Xenon