Bash 프롬프트에 현재 디렉터리와 상위 디렉터리만 표시

Bash 프롬프트에 현재 디렉터리와 상위 디렉터리만 표시

나는 bash를 처음 접했고 내 프롬프트가 tcsh에서 사소한 것을 보여주기를 바랐지만 좋은 Google 검색 후에도 여전히 할 수 없습니다.

다음과 같이 프롬프트에 현재 디렉터리와 상위 디렉터리만 포함하고 싶습니다.

/parent/currentdir $

tcsh에서는 다음을 통해 이를 달성합니다.

set prompt = "%C2 %"

그러나 지금까지 bash에서는 동일한 출력을 얻으려면 pwd를 구문 분석해야 한다는 사실만 발견했습니다.

다음과 같이 더 쉬운 방법은 없을까요?

export PS1="$(some_command) $" 

답변1

배쉬의시기적절한 통제특성은 상당히 정적입니다. 더 많은 제어를 원할 경우 프롬프트에 변수를 포함할 수 있습니다.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 \$'

PS1환경 변수가 아닌 셸 설정이므로 내보낼 필요도 없고 내보내서도 안 됩니다 . PS1다른 쉘은 bash 설정을 이해할 수 없습니다.

PS 좋은 대화식 쉘 경험을 원한다면 다음으로 전환하십시오.다루기 힘든, 모두(프롬프트 %확장에는 주로 tcsh chpwd등이 포함됨) 기본 기능입니다.

PS1='%2~ %# '

답변2

설정은 PROMPT_DIRTRIM=2필요한 것이어야 합니다.

답변3

bash프롬프트 문자열은 쉘 변수를 편집하여 쉽게 변경할 수 있습니다 PS1. 프롬프트 문자열 1을 나타냅니다. 추가 정보여기.

이제 bash쉘을 시작하십시오.

vi ~/.bashrc

PS1 정의를 파일에 추가

`export PS1="$(basename $(dirname $PWD))/$(basename $PWD)"`

더 많은 튜토리얼여기그리고여기, 추가로 조정할 수 있도록 도와드립니다.

답변4

export PROMPT_DIRTRIM=2bash 파일에 추가하면 최신 버전의 bash(v. 4+)에 대해 이 작업이 수행됩니다. 특히 이는 환경 변수 \w의 항목 모양을 PS1전체 경로에서 마지막 두 항목으로 변경합니다.

최종 결과는 다음과 같습니다.../Documents/MyFolder

관련 정보