$ wget
Edit ~/.bashrc or ~/.bash_profile.
Redefine PS1 as following:
export PS1=
| #!/bin/bash | |
| # PS1の設定 | |
| C() { | |
| case $1 in | |
| black) echo -e -n "\033[1;30m";; | |
| red) echo -e -n "\033[1;31m";; | |
| green) echo -e -n "\033[1;32m";; | |
| yellow) echo -e -n "\033[1;33m";; | |
| blue) echo -e -n "\033[1;34m";; | |
| magenta) echo -e -n "\033[1;35m";; | |
| cyan) echo -e -n "\033[1;36m";; | |
| white) echo -e -n "\033[1;37m";; | |
| *) echo -e -n "\033[0m";; | |
| esac | |
| } | |
| ps1_info() { | |
| local END_CODE=$? | |
| echo "${USER}@$(hostname -s) $(git-ps)" | |
| echo "$(date +'%F %H:%M:%S') $(pwd | sed -e "s|^${HOME%/}|~|")" | |
| } | |
| PS1='$(ps1_info)' | |
| # カーソル位置がずれる問題を回避するため、ここの部分だけは文字列連結にする | |
| if [ "$(id -u)" -eq 0 ]; then | |
| PS1="${PS1}\n\[$(C red)\]#\[$(red)\] " # rootの場合はシャープ | |
| else | |
| PS1="${PS1}\n\[$(C cyan)\]\$\[$(C reset)\] " # 非rootユーザの場合はドル | |
| fi | |
| export PS1 |
| #!/bin/bash | |
| set -euC | |
| C() { | |
| case $1 in | |
| black) echo -e -n "\033[1;30m";; | |
| red) echo -e -n "\033[1;31m";; | |
| green) echo -e -n "\033[1;32m";; | |
| yellow) echo -e -n "\033[1;33m";; | |
| blue) echo -e -n "\033[1;34m";; | |
| magenta) echo -e -n "\033[1;35m";; | |
| cyan) echo -e -n "\033[1;36m";; | |
| white) echo -e -n "\033[1;37m";; | |
| *) echo -e -n "\033[0m";; | |
| esac | |
| } | |
| status() { | |
| local modified=0 | |
| local cached=0 | |
| local untracked=0 | |
| while read -r line; do | |
| if [ "$line" = '_?_?_' ]; then | |
| untracked=1 | |
| continue | |
| fi | |
| if [[ "$line" =~ ^_[^[:space:]]_.?_ ]]; then | |
| cached=1 | |
| fi | |
| if [[ "$line" =~ ^_._[^[:space:]]_ ]]; then | |
| modified=1 | |
| fi | |
| done < <(git status --short | cut -b -2 | sed -e 's/\(.\)\(.*\)/_\1_\2_/') | |
| if [ $modified -ne 0 ]; then | |
| C red | |
| echo -n 'M' | |
| fi | |
| if [ $cached -ne 0 ]; then | |
| C green | |
| echo -n 'C' | |
| fi | |
| if [ $untracked -ne 0 ]; then | |
| C red | |
| echo -n '?' | |
| fi | |
| if [ -n "$(git stash list)" ]; then | |
| C cyan | |
| echo -n 'S' | |
| fi | |
| C reset | |
| } | |
| branch() { | |
| local branch | |
| branch="$(git branch 2>/dev/null | grep '^\*' | sed -e "s/^* //")" | |
| if [[ "${branch}" =~ ^bug- ]]; then | |
| C green | |
| elif [[ "${branch}" =~ ^atc- ]]; then | |
| C cyan | |
| elif [[ "${branch}" =~ ^tmp ]]; then | |
| C magenta | |
| elif [[ "${branch}" = "(detached from hde/master)" ]]; then | |
| C yellow | |
| else | |
| C white | |
| fi | |
| echo -n "${branch}" | |
| C reset | |
| } | |
| hash() { | |
| git log --pretty=format:'%h' -n 1 | |
| } | |
| git_ps() { | |
| if ! git status --ignore-submodules &>/dev/null; then | |
| return | |
| fi | |
| echo "git[$(status)]=$(branch):$(hash)" | |
| } | |
| if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then | |
| git_ps | |
| fi |
@doloopwhile
Hi, Thanks for this script it's fabulous! It took me a little (a lot) of effort to figure out how the script works (and I learned a little - a lot - about bash) but now I've based a section of my PS1 on it.
On my system I had to make one change in lines 25, 30 & 34 and I thought I'd mention it in case anyone else hits the same gotcha.
FROM:
untracked=1:: TO:((untracked++))bw
Alex