Bash의 프롬프트 제어 기능은 정적입니다. 더 많은 제어를 원하면 프롬프트에 변수를 포함시킬 수 있습니다. promptvars
옵션을 해제하지 않았는지 확인하십시오 .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
작은 따옴표를 참고하십시오. 변수 확장은 PS1
변수가 정의 된 시간이 아니라 프롬프트가 표시 될 때 발생해야합니다 .
표시되는 내용을보다 세밀하게 제어하려면 명령 대체를 사용할 수 있습니다. 예를 들어, 위의 스 니펫 ~
은 홈 디렉토리 의 약어를 잃습니다 .
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
이 코드는 다소 번거롭기 때문에 PS1
변수에 넣는 대신 PROMPT_COMMAND
변수 를 사용하여 코드를 설정 HPWD
한 다음 프롬프트에서 해당 코드를 사용할 수 있습니다.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
단축 된 프롬프트는 디렉토리 변경시에만 변경되었으므로 프롬프트가 표시 될 때마다 다시 계산할 필요가 없습니다. Bash는 현재 디렉토리 변경에서 실행되는 후크를 제공하지 않지만 재정의 및 사촌을 통해이를 시뮬레이션 할 수 있습니다 cd
.
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac
}
PS1='$HPWD \$'
export PS1
는 환경 변수가 아니라 쉘 설정이기 때문에 export 할 필요는 없으며, 그렇게해서는 안됩니다 . bash PS1
설정은 다른 쉘에서 이해할 수 없습니다.
PS 대화식 셸 환경을 원한다면 zsh로 전환하십시오 . 여기에서 %
tcsh chpwd
등을 포함하는 프롬프트 확장 은 모두 기본 기능입니다.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
bash와 동등한 것을 제공해야하지만 내 시스템에서는 제대로 작동하지 않습니다.