パスワードを忘れた? アカウント作成
10742641 journal
プログラミング

EarOwlの日記: My .bashrc (の一部) 6

日記 by EarOwl

.bashrc に下記の function を書いて、 PS1 シェル変数に $(get_vcs_type) を入れている。
各種 VCS の作業ディレクトリに移動すると、プロンプトに VCS の種類が表示されて便利。

#2558413#2558528 の AC さんの指摘を受けて修正。

function get_vcs_type {
if [[ `echo $PWD | grep "^$HOME/"` ]]; then
if [[ -z ${PWD/$HOME\/*/} ]]; then
        local dir="$PWD"
        local vcs
        while [[ $dir != $HOME ]]; do
            if [[ -d $dir/CVS ]]; then
                echo "cvs"
                return 0
            fi
            for vcs in bzr git hg svn; do
                if [[ -d $dir/.$vcs ]]; then
                    echo "$vcs"
                    return 0
                fi
            done
            dir="$(dirname "$dir")"
        done
    fi
}

補足...
上記の function の中身は、大元はどこかのサイトにあったものを、一部動作を自分なりに変更したものになります。
一番大きい変更は $HOME 以下のみを対象にしたこと。
$HOME 自身を対象外としているのは、ドットファイルをバージョン管理している場合、 $HOME に VCS のディレクトリがある状態になるだろう…と思ったからなのですが、調べてみたら通常はドットファイルをバージョン管理する場合でも $HOME 自身を作業ディレクトリにはしないのが一般的なんですね。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2014年03月07日 18時12分 (#2558413)

    if [[ `echo $PWD | grep "^$HOME/"` ]]; then

    if [ -z "${PWD/$HOME*/}" ]; then

    と書いた方が軽いかも.

    • by EarOwl (24188) on 2014年03月07日 19時20分 (#2558455) 日記

      ${変数名#パターン} や ${変数名/置換前/置換後/} などで変数の展開時に部分削除や置換が出来るのは知りませんでした。ご教示いただきありがとうございます。

      ただ、ご提示いただいた修正では誤りで、 if [[ -n ${PWD#$HOME} ]]; then が適切なようでしたので、こちらで修正しました。

      親コメント
      • by shibuya (17159) on 2014年03月07日 19時43分 (#2558476) 日記

        部分を削除/置換する機能はbashだけではなくてkshでもあったはず。bshはどうだったか忘れた。
        そもそもそこまで細かいことはその都度調べれば足りるので暗記する気なし。
        あと、echoその他もコマンド呼び出しとのトレードオフとか細かい話は昔からいろいろあるわけで。

        親コメント
      • by Anonymous Coward

        if [[ -n ${PWD#$HOME} ]]; then

        これだと /var とか /tmp 以下も処理対象になりませんか?

        対象を $HOME 以下、かつ $HOME は除外したい、ということなら

        if [ -z "${PWD/$HOME\/*/}" ]; then

        ですかね

        • by EarOwl (24188) on 2014年03月07日 23時33分 (#2558642) 日記

          その通りですね…というか自分が大きな勘違いをしていたことに今頃になって気付きました orz
          ご提示いただいた方法はもちろん正解ですし、 #2558413 の方法も正解でした。
          間違った答えを自信満々に言ってしまい、恥ずかしい…

          親コメント
typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...