Bash
システムプロンプトの処理
サーチ…
構文
- export PS1 = "something"#入力するコマンドをbashが待っているときに表示されます
- export PS2 = "anotherthing"#ステートメントがより多くの行に広がったときに表示される
- export PS3 = "select文の質問のプロンプト"#selectのためのめったに使われないプロンプト。最初にあなたのニーズにPS3を設定し、次にselectを呼び出します 。 ヘルプの選択を参照
- export PS4 = "デバッグには大抵便利です;行番号など"#bashスクリプトのデバッグに使用されます。
パラメーター
エスケープ | 詳細 |
---|---|
\ a | ベル文字。 |
\ d | 「平日月日」形式の日付(例:「Tue May 26」)。 |
\ D {書式} | FORMATは `strftime '(3)に渡され、結果はプロンプト文字列に挿入されます。空のFORMATの結果、ロケール固有の時間表現になります。中括弧は必須です。 |
\ e | エスケープ文字。 \ 033ももちろん使えます。 |
\ h | 最初の `。 'までのホスト名。 (すなわち、ドメイン部分がない) |
\ H | 最終的にドメイン部分を持つホスト名 |
\ j | 現在シェルによって管理されているジョブの数。 |
\ l | シェルの端末デバイス名のベース名。 |
\ n | 改行。 |
\ r | キャリッジリターン。 |
\ s | シェルの名前、 `$ 0 'の基本名(最後のスラッシュの後の部分)。 |
\ t | 時刻は、24時間HH:MM:SS形式です。 |
\ T | 時間は12時間のHH:MM:SS形式です。 |
@ | 12時間のam / pm形式の時刻。 |
\ A | 24時間制のHH:MM形式の時刻。 |
\ u | 現在のユーザーのユーザー名。 |
\ v | Bashのバージョン(例えば、2.00)は、 |
\ V | Bash、version + patchlevel(例えば2.00.0)のリリースは、 |
\ w | 現在の作業ディレクトリ。$ HOMEはチルダ($ PROMPT_DIRTRIM変数を使用)で省略されています。 |
\ W | $ PWDの基本名。$ HOMEはチルダで省略されています。 |
! | このコマンドの履歴番号。 |
# | このコマンドのコマンド番号。 |
$ | 有効なuidが0の場合は# 、そうでない場合は$です。 |
\ NNN | ASCIIコードが8進値NNNの文字。 |
\ | バックスラッシュ。 |
\ [ | 一連の非印字文字を開始します。これは、ターミナル制御シーケンスをプロンプトに埋め込むために使用できます。 |
\] | 一連の非印字文字を終了します。 |
PROMPT_COMMAND envrionment変数の使用
対話型bashインスタンスの最後のコマンドが実行されると、評価されたPS1変数が表示されます。実際にPS1を表示する前に、bashはPROMPT_COMMANDが設定されているかどうかを調べます。このvarの値は、呼び出し可能なプログラムまたはスクリプトでなければなりません。この変数が設定されている場合、PS1プロンプトが表示される前にこのプログラム/スクリプトが呼び出されます。
# just a stupid function, we will use to demonstrate
# we check the date if Hour is 12 and Minute is lower than 59
lunchbreak(){
if (( $(date +%H) == 12 && $(date +%M) < 59 )); then
# and print colored \033[ starts the escape sequence
# 5; is blinking attribute
# 2; means bold
# 31 says red
printf "\033[5;1;31mmind the lunch break\033[0m\n";
else
printf "\033[33mstill working...\033[0m\n";
fi;
}
# activating it
export PROMPT_COMMAND=lunchbreak
PS2の使用
コマンドが複数の行に及ぶとPS2が表示され、より多くのキーストロークを待つbashが表示されます。 while ... do..doneと同様の複合コマンドが入力されたときも同様に表示されます。
export PS2="would you please complete this command?\n"
# now enter a command extending to at least two lines to see PS2
PS3の使用
select文が実行されると、接頭辞付きの項目が表示され、PS3プロンプトが表示されます。
export PS3=" To choose your language type the preceding number : "
select lang in EN CA FR DE; do
# check input here until valid.
break
done
PS4の使用
PS4は、bashがデバッグモードにあるときに表示されます。
#!/usr/bin/env bash
# switch on debugging
set -x
# define a stupid_func
stupid_func(){
echo I am line 1 of stupid_func
echo I am line 2 of stupid_func
}
# setting the PS4 "DEBUG" prompt
export PS4='\nDEBUG level:$SHLVL subshell-level: $BASH_SUBSHELL \nsource-file:${BASH_SOURCE} line#:${LINENO} function:${FUNCNAME[0]:+${FUNCNAME[0]}(): }\nstatement: '
# a normal statement
echo something
# function call
stupid_func
# a pipeline of commands running in a subshell
( ls -l | grep 'x' )
PS1の使用
PS1は、bashがコマンドの入力を待つことを示す通常のシステムプロンプトです。エスケープシーケンスを理解しており、関数やプログラムを実行できます。 bashは、displayesプロンプトの後にカーソルを置く必要があるので、プロンプト文字列の有効長を計算する方法を知る必要があります。 PS1変数内の文字の印刷されていないシーケンスを示すために、エスケープされた中かっこが使用されます: \ [ 印刷されない文字列 \] 。すべての言われていることは、すべてのPS * varsに当てはまります。
(黒いキャレットはカーソルを示します)
#everything not being an escape sequence will be literally printed
export PS1="literal sequence " # Prompt is now:
literal sequence ▉
# \u == user \h == host \w == actual working directory
# mind the single quotes avoiding interpretation by shell
export PS1='\u@\h:\w > ' # \u == user, \h == host, \w actual working dir
looser@host:/some/path > ▉
# executing some commands within PS1
# following line will set foreground color to red, if user==root,
# else it resets attributes to default
# $( (($EUID == 0)) && tput setaf 1)
# later we do reset attributes to default with
# $( tput sgr0 )
# assuming being root:
PS1="\[$( (($EUID == 0)) && tput setaf 1 \]\u\[$(tput sgr0)\]@\w:\w \$ "
looser@host:/some/path > ▉ # if not root else <red>root<default>@host....
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow