web-dev-qa-db-ja.com

bashプロンプトに現在のディレクトリ名のみを表示する(フルパスではない)

私のbashプロンプトが現在設定されている方法は、現在のディレクトリへの完全なパスを示しています。プロンプトが長くなりすぎてすべてのコマンドが次の行に入るため、ディレクトリツリーの奥深くにいると、これは厄介です。パスの最後の部分だけを表示させるにはどうすればよいですか。

これが私の.bashrcにあるものです。

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# If this is an xterm set the title to user@Host:dir
case "$TERM" in
xterm*|rxvt*)
    Prompt_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
    ;;
*)
    ;;
esac
68
hsribei

\w(小文字)を\W(大文字)に変更します。

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
                                                                                       ^^
           this one waaaaaay over here ------------------------------------------------+    

たくさんの楽しい詳細については Bash Prompt HOWTO をご覧ください。例:

user@Host:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ 

user@Host:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '

user@Host:bin$

Prompt_COMMAND変数が設定されている場合、PS1で指定されたプロンプトを表示する前に実行されるコマンドです。あなたの場合、Prompt_COMMANDは、特定の ANSIエスケープシーケンスがXterm のタイトルバーを操作するechoステートメントを実行します。

Prompt_COMMANDPS1プロンプトをオーバーライドしていると思われる場合は、それをunsetに変更してテストしてみてください。

$ unset Prompt_COMMAND

最後に、実際に使われるPS1定義を変更していることを確認してください。一般的な場所は/etc/bash.bashrc/etc/profile~/.bashrc~/.bash_profile~/.profileです。システムファイルは通常(常にではありませんが)ユーザーファイルの前に実行されます。

89
quack quixote

単純なbash置換コマンドは

${VAR/pattern_to_find/pattern_to_replace}

最後のディレクトリを表示するには、単に${PWD/*\//}を実行します。つまり、最後の '/'を含む前のものを見つけて、それを何もしないで置き換えることができます。

私のUbuntuマシンで私が使用します:

export PS1='$(whoami):${PWD/*\//}#'. 
14
stopBugs

これに対する私の解決策は、どうやってそれをエクスポートするかという点で少し異なっているので、私はそれをここで共有すると思いました:

別のプロンプト文字列変数を作成します。 PS5し、.profile/.bash_profileファイルに次の文字列をエクスポートします。

\ u:現在のユーザー名を表示します。

\ W:現在の作業ディレクトリのベースを印刷します。

# Display username and current directory only.
export PS5='export PS1="\u:\W$";';

今すぐあなたが速記PSを使用する必要があるときはいつでも、ちょうど実行してください:eval $PS5


あるいは、さらに良いことに、.bash_aliasesファイルにエイリアスを作成してください。( @ muru に感謝します)

alias PS5='export PS1="\u:\W$";';

もう一度sourceを入力して、PS5と入力して切り替えます。

4
U-ways

私の解決策は、5つ以上ある場合はトップ3とボトム2のディレクトリを表示することです。

だから私のプロンプト(他の情報もあります)はこんな感じです:

08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/Rails/everquote

私のpwdが実際に

/home/durrantm/Dropbox/93_2016/work/code/Ruby__Rails/rails/everquote

私のPS1プロンプトは以下のように設定されています。

Host='\[\033[02;36m\]\h'; Host=' '$Host
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$Host$LOCATION$BRANCH

git_branchは現在のgitブランチを表示する関数です、私はそれを私のドットファイルに入れます、それはそれです:

git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
  }
3
Michael Durrant

Bashプロンプトに現在のディレクトリ名のみを表示する(フルパスではない)

私のドットファイルを共有するすべてのOS(AIX、Windoze、およびLinux)で、他のほとんどの解決策がうまく機能しませんでした。 bashポートは特定の構成要素をサポートしない古いバージョンであり、私はcygwinの下で著しく高価な別のプロセス(つまりsedawkなど)をforkしたくありませんでした。

以下は長いが性能が高い:

# takes a number argument of the number of last dirs to show
function DIR_LAST {
    # read -a didn't seem to work under bash 3
    IFS='/' array=($PWD)
    len=${#array[@]}
    start=$((len - $1))
    # leading / if fewer dir args: /usr/flastname not usr/flastname
    if (( $start <= 1 )); then
        start=1
        echo -n /
    fi
    for (( i = $start; $i < $len; i++ )); do
        if (( $i > $start )); then
            echo -n /
        fi
        echo -n ${array[$i]}
    done
}
export PS1="\$(DIR_LAST 2) {$(hostname)} "

それを吐き出したいのですが。

/
/usr
/usr/foo
foo/bin

最後の行の先頭にスラッシュがないことに注目してください。これが私の好みです。また、引数をDIR_LASTに変更することで、最後の3つのディレクトリを吐き出すことができます。

また、私は正規表現とBASH_REMATCHを使ってこれをやろうとしました、しかしbash v3は括弧が好きではなかったようで、私はそれらを正しくエスケープする方法を理解することができませんでした。ため息.

1
Gray
root:~/project#  -> root:~/project(dev)# 

〜/ .bashrcの最後に次のコードを追加してください。

force_color_Prompt=yes
color_Prompt=yes
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_Prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_Prompt force_color_Prompt
0
Ali Alp

これは、あなた自身のbash Promptを作るためのドラッグアンドドロップインターフェースを提供する 素晴らしい小さなツール です。完全なパスではなく現在のフォルダの名前のみを表示するには、 "Directory(basename)"要素を使用します。

0
HoboFlo

私はこのオプションが単にすることによって、はるかに簡単であると思います:

echo $PWD | rev | cut -d '/' -f 1 | rev

それで、これをあなたの.bashrcファイルのPS1変数に代入します。

PS1='$(PWD | rev | cut -d '/' -f 1 | rev)'
0
Dani Mach