문제

현재 상황에서는 상황에 따라 여러 다른 사용자로 여러 UNIX 컴퓨터에 연결하고 작업을 수행하는 컴퓨터의 다양한 디렉터리를 탐색하는 것이 이상한 일이 아닙니다.나는 전체 과정에서 ksh를 사용합니다.

최근에 프롬프트를 만지작거리고 있었는데 현재 사용자 이름과 현재 서버에 따라 일부 색상이 변경되도록 할 수 있었습니다.그러나 내가 원하는 것은 현재 디렉토리에 따라 색상을 변경하는 것입니다.예를 들어, "foo" 디렉토리에 있다면 프롬프트는 노란색이어야 하지만, "bar" 디렉토리에 있다면 프롬프트는 자홍색이 될 것입니다.두 경우 모두 하위 디렉터리도 계산되어야 하므로 간단한 하위 문자열 확인만으로 충분합니다.

그러나 내가 직면한 문제는 .profile 스크립트를 실행할 때 디렉토리에 색상이 제대로 지정된다는 것입니다. 그러나 다른 디렉토리로 전환할 때마다 더 이상 동적으로 업데이트되지 않으며 모든 작업을 수행하기 전에는 어떻게 되었는지 잘 모르겠습니다. 분기를 통해 디렉토리를 전환한 후에도 현재 작업 디렉토리를 올바르게 인쇄할 수 있었습니다.

인터넷 검색을 하고 bash에 대한 정보를 찾았지만 ksh는 대부분 무시되는 것 같습니다.이 작업을 스스로 수행하는 방법을 알 수 없으므로 Stack Overflow 커뮤니티에 가져와서 향후 지식에 추가해야 합니다.따라서 장황한 설명을 통해 내 질문의 "빠른 버전"은 다음과 같습니다.

ksh에서 현재 작업 디렉토리를 표시하고 현재 작업 디렉토리의 위치에 따라 텍스트 색상을 지정하도록 프롬프트를 어떻게 설정할 수 있습니까?심지어 가능합니까?

도움이 되었습니까?

다른 팁

zsh를 사용하지 않는 이유는 무엇입니까?ksh를 기반으로 하며 훨씬 더 강력합니다.zsh에서는 디렉토리를 변경할 때마다 암시적으로 호출되는 chpwd 함수를 작성할 수 있습니다.이 기능에서는 현재 디렉토리를 확인하고 PS1을 원하는 대로 설정할 수 있습니다.

또는 (ksh에서도) cd 명령에 대한 별칭을 만들 수 있습니다.

change_my_ps() {
  PS1=...
}
better_cd() {
  builtin cd "$@"
  change_my_ps
}
alias cd=better_cd

이 같은.그것이 적절한지 잘 모르겠습니다. ksh 구문이 기억나지 않습니다.

ksh에서 현재 디렉터리를 표시하려면 다음을 .profile 파일에 입력하세요.내보내기 PS1="\$PWD " 함수를 조작하지 않고 디렉토리를 변경하면 동적으로 업데이트됩니다.

색상에 관한 부분에는 실제로 아무도 대답하지 않았으므로 다음과 같이 하겠습니다.텍스트에 색상을 지정할 수 없으므로 터미널 스크린샷도 포함했습니다.

보다 ANSI 이스케이프 코드에 대한 Wikipedia 페이지 색상 코드의 전체 목록을 보려면 print --man 그리고 printf --man ksh에서 이스케이프 시퀀스를 인쇄하는 방법에 대한 자세한 내용은

(현재 베타 버전인 ksh93v에는 bash를 기반으로 하는 프롬프트 언어가 포함되어 있어 이러한 종류의 작업이 다소 쉬워질 것입니다. 하지만 복잡한 작업을 수행하려면 이 기능과 같은 것을 사용해야 할 수도 있습니다. 이와 같은 조건부 프롬프트입니다.)

> cat ~/scripts/prompt    
function prompt
{
    set -eu
    typeset c=
    case $PWD in
        */foo) c=3;; # yellow
        */bar) c=5;; # magenta
    esac
    print "\E[3${c}m$PWD\E[m > "
}
PS1='`prompt`'
> . ~/scripts/prompt
/Users/adavies > cd foo  
/Users/adavies/foo > cd ../bar
/Users/adavies/bar > 

enter image description here

나는 이것을 사용합니다 :

function chdir
{
   cd "$@"
   CWDH=${PWD%/*}
   PS1="($_time)$hname:${CWDH##*/}/${PWD##*/} ->"
   export PS1
}
alias cd=chdir
chdir .

시간과 이름은 무시하세요. 나머지는 괜찮을 것입니다.색상 변경은 터미널에 따라 다릅니다.사용할 터미널의 각 색상에 대한 이스케이프 코드를 알아야 합니다.xterm만 사용한다는 것을 안다면 더 쉬울 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top