2017-08-23 11 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

このコマンドは2つのことを行います。端末ウィンドウのタイトルを設定し、 は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= 

これはbashプロンプト含んでPS1変数を設定します。

\e[0;33m 

\eANSI Escape Codeの開始を意味する制御シーケンスイントロデューサ、あるESC文字(ASCII =として0x1B)に変換されます。シーケンスの末尾のm文字は、[mの間のすべてが;(詳細は、を参照)のSGR(Select Graphic Rendition)パラメータのリストとして解釈されることを示します。 0は以前のすべてのテキスト書式を消去し、33はテキストの色を黄色に設定します。

myProject 

これは単なるbashプロンプトに文字列myProjectを追加します。

\e[0;32m 

これにより、以前のテキスト書式(0)がすべてクリアされ、テキストの色が緑色に設定されます。 (32)

\[ ... \] 

\[\]で終了する非印刷文字のシーケンスを開始します。これらの2つの区切り文字の間のすべてがプロンプトで表示されません。

\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

これはあなたがここで持っているかなり複雑なコマンドです!

セクションをセクションごとに分解しましょう。

これは、他のプログラムで使用する変数を設定していることを意味します。

PS1= 

変数の名前はPS1です。

\e 

これはエスケープ文字です。 bash(そしてほとんどのプログラミング言語)では、その前にバックスラッシュが付いたものはエスケープ文字です。空白のような制御文字や文字列の中にコントロールキーを含める必要があるときに使用されます。それがエスケープされると、bashは文字列の一部のように扱いますが、別の制御文字ではありません。

これは配列の先頭です。 Cプログラムの配列と非常によく似ています。

; 

これはいくつかの異なることを意味します。ここでは、配列の一部を定義するために使用されています。

ここには他にもいくつかのものがありますが、大部分は配列内のデータです。

: 

これはNOTオペランドです。これは、何かの逆数を決定するために使用されます。

${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

関連する問題