#author("2023-10-07T20:13:42+09:00","","")
#author("2024-02-10T23:14:30+09:00","","")
#topicpath
* 目次 [#tb85ae49]
#contents();
#ls2(Lang/shell/bash/設定/);

////////////////////////////////////////////////////////////////////////////////
* コマンド履歴 [#oc4641a4]
//==============================================================================
** 履歴保存先ファイルの指定 [#h917a37e]
- コマンド履歴は、通常は ${HOME}/.bash_profile に保存される。これを別なファイルに保存したい場合は、
 export HISTFILE=<新しいコマンド履歴ファイル名>
とする。&br;
例えば、[[screen>App/screen]]でセッション毎にコマンド履歴を保存したい場合に、セッション毎のコマンド履歴ファイルを指定するなど。
 if [ "${STY}" != "" ]; then
     export HISTFILE=${HISTFILE_DIR}/${TERM}.${STY##*.};
 fi

//==============================================================================
** 履歴にタイムスタンプを付加する [#d3a5fdd5]
- 環境変数 HISTTIMEFORMAT にタイムスタンプフォーマットを指定する。この文字列は strftime(3) の書式文字列 として使われる。
 export HISTTIMEFORMAT="%F %T "

//==============================================================================
** 履歴を1コマンド毎に保存する [#nc27737e]
- 環境変数 PROMPT_COMMAND に指定されたコマンドがあると、bash はそのコマンドをプロンプトを表示する直前に毎回実行する。
 export PROMPT_COMMAND="history -a; history -r"
 shopt -o histappend # histappend は上記により不要になるので、無効にする
- "history -a" :「新しい」履歴行 (bash の現在のセッションの開始以降に入力された履歴行)  を履歴ファイルに追加します。
- "history -c" :全てのエントリを削除し、履歴リストをクリアします。
- "history -r" :履歴ファイルの内容を読み込み、これらを現在の履歴として用います。
- histappend  :設定されている場合、シェルの終了時に変数 HISTFILE の値で指定しているファイルに履歴リストが追加されます。  ファイルへの上書きは行われなくなります。


////////////////////////////////////////////////////////////////////////////////
* PS1 (プロンプト文字列) [#cde76c5c]
//==============================================================================
** PS1 で使用出来る組み込み特殊文字 [#a2fc3701]
|~特殊文字  |~表示内容             |
|\a         |ASCII のベル文字 (07) |
|\d         |"曜日 月 日" という形式の日付 (例: "Tue May 26") |
|\D{format} |format が strftime(3) に渡され、 その結果がプロンプト文字列に挿入されます。  format  が空の場合には  (ブレースは必要)、 ロケールで指定された時刻表記になります。 |
|\e         |ASCII のエスケープ文字 (033) |
|\h         |ホスト名のうち最初の `.' までの部分 |
|\H         |ホスト名 |
|\j         |シェルによって現在管理されているジョブの数 |
|\l         |シェルの端末デバイスのベース名 (basename) |
|\n         |改行 (newline) |
|\r         |復帰 (carriage return) |
|\s         |シェルの名前。つまり  $0 のベース名 (最後のスラッシュ以降の部分) |
|\t         |24 時間制の HH:MM:SS 形式の現在の時刻 |
|\T         |12 時間制の HH:MM:SS 形式の現在の時刻 |
|\@         |12 時間制の am/pm 形式の現在の時刻 |
|\A         |12 時間制の HH:MM 形式の現在の時刻 |
|\u         |現在のユーザのユーザ名 |
|\v         |bash のバージョン (例: 2.00) |
|\V         |bash のリリース。バージョンにパッチレベルを加えたもの (例: 2.00.0) |
|\w         |現在の作業ディレクトリ。 $HOME の部分はチルダに短縮されます。 PROMPT_DIRTRIM の値が適用されます。 |
|\W         |現在の作業ディレクトリのベース名 $HOME の部分はチルダに短縮されます。 |
|\!         |このコマンドの履歴番号 |
|\#         |このコマンドのコマンド番号 |
|\$         |実効 UID が 0 の場合に #、 それ以外の場合は $ |
|\nnn       |8進数 nnn に対応する文字 |
|\\         |バックスラッシュ |
|\[         |非表示文字のシーケンスの開始。 これを使うと、プロンプト中に端末の制御シーケンスを埋め込むことができます。 |
|\]         |非表示文字のシーケンスを終了します。 |
- 上記は man (1) bash から抜粋。

//==============================================================================
** git 関連 [#t471a078]
- bash が下記ファイルを参照するよう設定されていれば、 git の情報を PS1 に表示することが出来る。
 git-prompt
-- debian の場合、ディストリビューションで用意されたものは下記に配置される(git を install していれば、在る筈)
 /etc/bash_completion.d/git-prompt

//------------------------------------------------------------------------------
*** 設定方法 [#hb07fd6f]
+ PS1 に ''$(__git_ps1)'' を追加する
-- 例えば
 [\u@\h:\l \W]$
~
であれば、下記のように:
 PS1="[\u@\h:\l \W $(__git_ps1)]$ "
-- git 情報の部分を赤文字にする場合:
 PS1="[\u@\h:\l \W\033[31m\]$(__git_ps1)\[\033[00m\]]$ "
+ $(__git_ps1) による表示内容を調整する
-- git-promput から読み込んでいる下記ファイルにて、表示に関するオプションが用意されている。
 /usr/lib/git-core/git-sh-prompt
-- オプション一覧
|~parameter                  |~setting val. |~indicate description                             |~remark |
|GIT_PS1_SHOWDIRTYSTATE      |yes           |"*":unstaged, "+":staged                          | |
|GIT_PS1_SHOWSTASHSTATE      |yes           |"$":something is stashed                          | |
|GIT_PS1_SHOWUNTRACKEDFILES  |yes           |"%":There are untracked files.                    | |
|GIT_PS1_COMPRESSSPARSESTATE |yes           |                                                  | |
|GIT_PS1_SHOWUPSTREAM        |yes           |"<":behind, ">":ahead, "=":there is no difference | |
|GIT_PS1_STATESEPARATOR      |yes           | | |
|GIT_PS1_SHOWCOLORHINTS      |yes           | | |
-- 上記設定値は全て、空文字かどうかで判定されているので、有効にしたいものは何らかの文字列(上記では "yes" とした)を設定し、有効にしないものはから文字にしておく。
--- "no" を設定しても "yes" としたときと同じ動作になるので注意。
-- これらのオプションは、少なくとも PS1 の定義より前に設定しておく必要がある。
-- 設定例
 $ cat ${HOME}/.bashrc
 <snip>
 GIT_PS1_SHOWDIRTYSTATE=yes
 GIT_PS1_SHOWUNTRACKEDFILES=yes
 GIT_PS1_SHOWUPSTREAM=yes
 PS1="[\u@\h:\l \W $(__git_ps1)]$ "
 <snip>

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS