tcsh에는 기본값이 있습니다.
prompt [%m:%c3] %n%#
다음과 같은 프롬프트가 표시됩니다.
[woehler:hacking/c/hello] ajcarr%
그리고
[woehler:~] ajcarr%
즉, 현재 디렉터리와 그 위의 다음 두 디렉터리가 경로에 포함됩니다.
ksh93 또는 bash에서 $HOME
by로 바꾸는 것은 현재 디렉터리의 이름을 추출하는 것만큼 쉽지만 tcsh의 동작을 복제하는 방법을 ~
찾지 못했습니다 . %c3
현재 ksh93에는 다음이 있습니다.
[ajcarr@Woehler] hello $
그리고
[ajcarr@Woehler] ~ $
이 작업을 수행하는 방법에 대한 제안이 있는 사람이 있습니까?
답변1
존재하다ksh93
:
PS1='${PWD#${PWD%?/*/*/*}?/} \$ '
share/doc/libnl-3-dev $ _
PS1='[${HOSTNAME%%.*}:${PWD#${PWD%?/*/*/*}?/}] $USER% '
[host:share/doc/libnl-3-dev] user% _
$HOME
로 바꾸려면 ~
더 나쁜 것이 필요합니다.
PS1='$(d=${PWD/#$HOME/"~"};printf %s "${d#${d%?/*/*/*}?/}") $ '
~/w/maemo $ cd sb2-pathmaps
w/maemo/sb2-pathmaps $ _
PS1='$(d=${PWD/#$HOME/"~"};printf %s "[${HOSTNAME%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
[host:w/maemo/sb2-pathmaps] user% _
이 모든 것은 다음에도 적용되어야 합니다.bash
, 비록 bash
자체 프롬프트 이스케이프(예: \h
for ${HOSTNAME%%.*}
) 및 경로 단축 메커니즘( PROMPT_DIRTRIM
)이 있지만.
bash
또한 더 나쁜 변형은 와 달리 내장 명령만 포함하더라도 ksh93
각 명령 대체 fork()
에 대해 별도의 프로세스가 있기 때문에 정말 짜증나는 일입니다 . $(...; printf ...)
이는 pdksh
파생 쉘 에도 적용됩니다 mksh
.
zsh
프롬프트 이스케이프는 다음과 매우 유사하지만 동일하지는 않습니다 tcsh
.
zsh$ PS1='[%m:%3c] %n%# '
[host:share/doc/libnl-3-dev] user% _
노트:
기본적으로 이 $HOSTNAME
변수는 설정되어 있지 않습니다 ksh93
. 대신 내장 함수를 사용할 수 있습니다 uname
(활성화한 후 PATH=/opt/ast/bin:$PATH
경로 /opt/ast/bin
가 존재할 필요가 없습니다).
PS1='$(d=${PWD/#$HOME/"~"};h=$(uname -n); printf %s "[${h%%.*}:${d#${d%?/*/*/*}?/}]") $USER% '
\h
bash 또는 %m
escape in zsh
또는 tcsh
this 에서 탈출하는 것과는 다릅니다.~ 할 것이다호스트 이름 변경 사항을 추적합니다.
답변2
Bash의 경우 구현할 수 있습니다비슷한결과는 다음에 의해 설정됩니다.PROMPT_DIRTRIM
바꾸다:
$ PS1='[\u@\h] \w\$ '
[schaller@r2d2] ~$ pwd
/home/schaller
[schaller@r2d2] ~$ PROMPT_DIRTRIM=3
[schaller@r2d2] ~$ cd /home/schaller/tmp/513924/another/directory/here
[schaller@r2d2] ~/.../another/directory/here$