BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

Bash シェル:PS1、PS2、PS3、PS4、および PROMPT_COMMAND を制御する

Bash シェル:PS1、PS2、PS3、PS4、および PROMPT_COMMAND を制御するPS1、PS2、PS3、PS4、およびPROMPT_COMMAND 効果的です。 PSはプロンプトステートメントの略です。この記事では、簡単な例を使用して、Linux コマンド プロンプトの環境変数について簡単に説明します。

1. PS1 – デフォルトの対話プロンプト

Linux のデフォルトの対話型プロンプトは、以下に示すように、便利で有益なものに変更できます。次の例では、デフォルトの PS1 は「\s-\v\$」で、シェル名とバージョン番号が表示されます。以下に示すように、このデフォルトの動作を変更して、ユーザー名、ホスト名、および現在の作業ディレクトリ名を表示してみましょう。

-bash-3.2$ export PS1="\u@\h \w> "

ramesh@dev-db ~> cd /etc/mail
ramesh@dev-db /etc/mail>
[Note: Prompt changed to "username@hostname current-dir>" format] 

この例では、次の PS1 コードが使用されています:

  • \u – ユーザー名
  • \h – ホスト名
  • \w – 現在のディレクトリのフル パス名。ホーム ディレクトリにいる場合は、上記のように ~ のみが表示されることに注意してください
  • PS1 の値の末尾にスペースがあることに注意してください。個人的には、読みやすくするために、プロンプトの最後にスペースを入れることを好みます。

以下に示すように、 export PS1=”\u@\h \w> ” を .bash_profile (または) .bashrc に追加して、この設定を永続的にします。

ramesh@dev-db ~> vi ~/.bash_profile (or)
ramesh@dev-db ~> vi ~/.bashrc
[Note: Add export PS1="\u@\h \w> " to one of the above files]

次の投稿では、PS1 の実際の使用例をいくつか詳しく書いていきます。

2. PS2 – 継続対話プロンプト

非常に長い UNIX コマンドは、行末に \ を付けることで複数行に分割できます。複数行コマンドのデフォルトの対話型プロンプトは「>」です。以下に示すように、PS2 環境変数を使用して、このデフォルトの動作を「continue->」を表示するように変更してみましょう。

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
> --key_buffer_size=512M --sort_buffer_size=512M \
> --read_buffer_size=4M --write_buffer_size=4M \
> /var/lib/mysql/bugs/*.MYI
[Note: This uses the default ">" for continuation prompt]

ramesh@dev-db ~> export PS2="continue-> "

ramesh@dev-db ~> myisamchk --silent --force --fast --update-state \
continue-> --key_buffer_size=512M --sort_buffer_size=512M \
continue-> --read_buffer_size=4M --write_buffer_size=4M \
continue-> /var/lib/mysql/bugs/*.MYI
[Note: This uses the modified "continue-> " for continuation prompt]

長いコマンドを \.また、長いコマンドを分割するのが嫌いな人も見てきました。あなたの好みは何ですか?長いコマンドを複数の行に分割するのは好きですか?

<センター>

3. PS3 – シェル スクリプト内の「選択」によって使用されるプロンプト

以下で説明するように、PS3 環境変数を使用して、シェル スクリプト内で選択ループのカスタム プロンプトを定義できます。

PS3 を使用しないシェル スクリプトと出力:

ramesh@dev-db ~> cat ps3.sh

select i in mon tue wed exit
do
 case $i in
 mon) echo "Monday";;
 tue) echo "Tuesday";;
 wed) echo "Wednesday";;
 exit) exit;;
 esac
done

ramesh@dev-db ~> ./ps3.sh

1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 4
[Note: This displays the default "#?" for select command prompt]


PS3 でのシェル スクリプトと出力:

ramesh@dev-db ~> cat ps3.sh

PS3="Select a day (1-4): "
select i in mon tue wed exit
do
 case $i in
 mon) echo "Monday";;
 tue) echo "Tuesday";;
 wed) echo "Wednesday";;
 exit) exit;;
 esac
done

ramesh@dev-db ~> ./ps3.sh
1) mon
2) tue
3) wed
4) exit
Select a day (1-4): 1
Monday
Select a day (1-4): 4
[Note: This displays the modified "Select a day (1-4): "
 for select command prompt]

4. PS4 – 「set -x」でプレフィックス トレース出力に使用

PS4 シェル変数は、以下に示すように、デバッグ モードでシェル スクリプトを実行したときに表示されるプロンプトを定義します。

PS4 を使用しないシェル スクリプトと出力:

ramesh@dev-db ~> cat ps4.sh

set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh

++ echo 'PS4 demo script'
PS4 demo script
++ ls -l /etc/
++ wc -l
243
++ du -sh /home/ramesh
48K /home/ramesh
[Note: This displays the default "++" while tracing the output using set -x]


PS4 でのシェル スクリプトと出力:
ps4.sh で以下に定義されている PS4 には、次の 2 つのコードがあります:

  • $0 – スクリプトの名前を示します
  • $LINENO – スクリプト内の現在の行番号を表示します
ramesh@dev-db ~> cat ps4.sh

export PS4='$0.$LINENO+ '
set -x
echo "PS4 demo script"
ls -l /etc/ | wc -l
du -sh ~

ramesh@dev-db ~> ./ps4.sh
../ps4.sh.3+ echo 'PS4 demo script'
PS4 demo script
../ps4.sh.4+ ls -l /etc/
../ps4.sh.4+ wc -l
243
../ps4.sh.5+ du -sh /home/ramesh
48K /home/ramesh
[Note: This displays the modified "{script-name}.{line-number}+"
 while tracing the output using set -x]

5. PROMPT_COMMAND

Bash シェルは、PS1 変数を表示する直前に PROMPT_COMMAND の内容を実行します。

ramesh@dev-db ~> export PROMPT_COMMAND="date +%k:%m:%S"
22:08:42
ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on different lines]

PROMPT_COMMAND の値を PS1 と同じ行に表示する場合は、以下に示すように echo -n を使用します。

ramesh@dev-db ~> export PROMPT_COMMAND="echo -n [$(date +%k:%m:%S)]"
[22:08:51]ramesh@dev-db ~>
[Note: This displays the PROMPT_COMMAND and PS1 output on the same line]

この記事が気に入ったら、del.icio.us と Stumble でブックマークしてください。 下の [What Next?] セクションのリンクを使用してください。


  1. jm-shell –非常に有益でカスタマイズされたBashシェル

    jm-shell は無料のオープンソースで、小さく、非常に有益で、カスタマイズされたBashシェルであり、シェルアクティビティに関する豊富な情報だけでなく、システム負荷平均、ラップトップ/コンピューターのバッテリーステータスなどの特定の有用なシステム情報を提供します。 重要なのは、バッシュとは異なり 以前に実行されたコマンドを検索するために、一意のコマンドのみを履歴ファイルに保存します–jm-shellはすべてのシェルアクティビティをログファイルに記録します。 また読む :BashShellのLinux「HistoryCommand」の力 さらに、現在のディレクトリが Gitなどのバ

  2. Bash Shell PS1:Angelina Jolie のような Linux プロンプトを作成する 10 の例

    f1r3storm85 提供の写真 前回の記事では、Linux 環境変数 PS[1-4] と PROMPT_COMMAND について説明しました。効果的に使用すれば、PS1 はコマンド プロンプトですぐに貴重な情報を提供できます。 トゥーム レイダーでは、アンジェリーナ ジョリーがすべてのガジェットと武器を指先で操作して、スタイリッシュに謎を解き明かします。アンジェリーナ・ジョリーのガジェットとスタイルは一致させるのが難しいですが、少なくとも、この記事で提供されている 10 の例を使用して、古き良き Linux プロンプトを非常に機能的でスタイリッシュなものにしてみましょう. 1.ユー