내 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
. 귀하의 경우 Xterm의 제목 표시 줄 을 조작하는 특정 ANSI 이스케이프 시퀀스PROMPT_COMMAND
로 echo
명령문을 실행 하십시오 .
프롬프트를 PROMPT_COMMAND
무시하고 있다고 의심되면 다음을 수행하여 테스트 PS1
할 수 있습니다 unset
.
$ unset PROMPT_COMMAND
마지막으로 PS1
실제로 사용되는 정의를 변경하고 있는지 확인하십시오 . 일반적인 위치는 /etc/bash.bashrc
, /etc/profile
, ~/.bashrc
, ~/.bash_profile
, ~/.profile
. 시스템 파일은 일반적으로 사용자 파일보다 먼저 실행되지만 항상 그런 것은 아닙니다.
답변
간단한 bash replace 명령은
${VAR/pattern_to_find/pattern_to_replace}
마지막 디렉토리를 표시하려면 ${PWD/*\//}
, 예를 들어 마지막 ‘ /
‘을 포함하여 이전의 모든 것을 찾아서 아무것도없는 것으로 바꾸십시오.
내 우분투 컴퓨터에서 다음을 사용합니다.
export PS1='$(whoami):${PWD/*\//}#'.
답변
내 솔루션은 5 개가 넘는 경우 상위 3 개 및 하위 2 개 디렉토리를 표시하는 것입니다
따라서 내 프롬프트 (다른 정보도 있음)는 다음과 같습니다.
08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote
내 암호가 실제로
/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_branch () {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
}
답변
내 솔루션은 내보내는 방법에 따라 약간 다르므로 여기에서 공유한다고 생각했습니다.
다른 프롬프트 문자열 변수를 작성하십시오. 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
하면 이제 입력 하여 전환 할 수 있습니다 .
답변
bash 프롬프트에서 현재 디렉토리 이름 만 표시 (전체 경로 아님)
다른 솔루션의 대부분은 내 도트 파일 (AIX, Windoze 및 Linux)을 공유하는 모든 OS에서 작동하지 않았습니다. 배쉬 포트는 특정 구조를 지원하지 않은 이전 버전이었고, 나는 다른 프로세스 (즉, 포크 싶지 않았다 sed
, awk
Cygwin에서 아래에 띄게 비싸 등).
다음은 길지만 성능이 뛰어납니다.
# 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
마지막 줄에 슬래시가 없다는 것을 알 수 있습니다. 또한 arg를로 변경하여 마지막 3 개 디렉토리를 뱉어 낼 수 있습니다 DIR_LAST
.
또한 정규 표현식 으로이 작업을 시도 BASH_REMATCH
했지만 bash v3은 parens를 좋아하지 않는 것 같으며 올바르게 탈출하는 방법을 알 수 없었습니다. 한숨.
답변
나는 단순히 다음을 수행 함으로써이 옵션이 훨씬 쉽다고 생각합니다.
echo $PWD | rev | cut -d '/' -f 1 | rev
따라서 이것을 .bashrc 파일의 PS1 변수에 할당하십시오.
PS1='$(PWD | rev | cut -d '/' -f 1 | rev)'
답변
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