私の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
\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_COMMAND
がPS1
プロンプトをオーバーライドしていると思われる場合は、それをunset
に変更してテストしてみてください。
$ unset Prompt_COMMAND
最後に、実際に使われるPS1
定義を変更していることを確認してください。一般的な場所は/etc/bash.bashrc
、/etc/profile
、~/.bashrc
、~/.bash_profile
、~/.profile
です。システムファイルは通常(常にではありませんが)ユーザーファイルの前に実行されます。
単純なbash置換コマンドは
${VAR/pattern_to_find/pattern_to_replace}
最後のディレクトリを表示するには、単に${PWD/*\//}
を実行します。つまり、最後の '/
'を含む前のものを見つけて、それを何もしないで置き換えることができます。
私のUbuntuマシンで私が使用します:
export PS1='$(whoami):${PWD/*\//}#'.
これに対する私の解決策は、どうやってそれをエクスポートするかという点で少し異なっているので、私はそれをここで共有すると思いました:
別のプロンプト文字列変数を作成します。 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
と入力して切り替えます。
私の解決策は、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/'
}
Bashプロンプトに現在のディレクトリ名のみを表示する(フルパスではない)
私のドットファイルを共有するすべてのOS(AIX、Windoze、およびLinux)で、他のほとんどの解決策がうまく機能しませんでした。 bashポートは特定の構成要素をサポートしない古いバージョンであり、私はcygwinの下で著しく高価な別のプロセス(つまりsed
、awk
など)を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は括弧が好きではなかったようで、私はそれらを正しくエスケープする方法を理解することができませんでした。ため息.
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
これは、あなた自身のbash Promptを作るためのドラッグアンドドロップインターフェースを提供する 素晴らしい小さなツール です。完全なパスではなく現在のフォルダの名前のみを表示するには、 "Directory(basename)"要素を使用します。
私はこのオプションが単にすることによって、はるかに簡単であると思います:
echo $PWD | rev | cut -d '/' -f 1 | rev
それで、これをあなたの.bashrcファイルのPS1変数に代入します。
PS1='$(PWD | rev | cut -d '/' -f 1 | rev)'