Kornshell에서 프롬프트를 사용자 정의하는 방법은 호스트 이름과 현재 디렉토리를 표시하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1171663

문제

나는 Solaris에서 Kornshell (KSH)을 사용하고 있으며 현재 내 PS1 Env var는 다음과 같습니다.

PS1="${HOSTNAME}:\${PWD} \$ "

그리고 프롬프트가 표시됩니다. hostname:/full/path/to/current/directory $

그러나 표시하고 싶습니다. hostname:directory $

다시 말해, 호스트 이름과 현재 디렉토리의 이름 만 표시하는 방법, 즉 tmp 또는 ~ 또는 public_html 기타?

도움이 되었습니까?

해결책

읽는 것 KSH 남자 페이지 당신은 원합니다

PS1="${HOSTNAME}:\${PWD##*/} \$ "

Sunos 5.8의 기본 KSH에서 테스트

다른 팁

좋아, 조금 늙고 조금 늦었지만, 이것이 내가 Kornshell에서 사용하는 것입니다.

PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")'

이것은 동등한 프롬프트를 만듭니다 PS1="\u@\h:\w\n$ " Bash에서.

예를 들어:

qazwart@mybook:~
$ cd bin
qazwart@mybook:~/bin
$ cd /usr/local/bin
qazwart@mybook:/usr/local/bin
$ 

때로는 매우 긴 디렉토리 이름을 가지고 있기 때문에 두 줄 프롬프트가 마음에 들며 많은 명령 줄을 가져갈 수 있습니다. 한 줄의 프롬프트를 원한다면 마지막 인쇄문에서 " n"을 떠나십시오.

PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "$ ")'

그것은 동일합니다 PS1="\u@\h:\w$ " Bash에서 :

qazwart@mybook:~$ cd bin
qazwart@mybook:~/bin$ cd /usr/local/bin
qazwart@mybook:/usr/local/bin$ 

배쉬 프롬프트를 설정하는 것만 큼 쉽지는 않지만 아이디어를 얻습니다. 스크립트를 작성하기 만하면됩니다 PS1 그리고 Kornshell은 그것을 실행합니다.


Solaris 및 기타 나이가 많습니다 Kornshell의 버전

위의 것은 Solaris에서 작동하지 않는다는 것을 알았습니다. 대신, 당신은 그것을 진짜 해킹 방식으로해야합니다 ...

  • 당신의 .profile, 그것을 확인하십시오 ENV="$HOME/.kshrc"; export ENV설정되었습니다. 이것은 아마도 당신을 위해 올바르게 설정되었을 것입니다.

  • 당신의 .kshrc 파일, 당신은 두 가지 일을 할 것입니다

    1. 당신은 호출되는 함수를 정의 할 것입니다 _cd. 이 기능은 지정된 디렉토리로 변경 된 다음 PWD를 기반으로 PS1 변수를 설정합니다.
    2. 당신은 별명을 설정할 것입니다 cd 실행하려면 _cd 기능.

이것은 관련 부분입니다 .kshrc 파일:

function _cd {
   logname=$(logname)   #Or however you can set the login name
   machine=$(hostname)  #Or however you set your host name
   $directory = $1
   $pattern = $2        #For "cd foo bar"

   #
   # First cd to the directory
   # We can use "\cd" to evoke the non-alias original version of the cd command
   #
   if [ "$pattern" ]
   then
       \cd "$directory" "$pattern"
   elif [ "$directory" ]
   then
       \cd "$directory"
   else
       \cd
   fi

   #
   # Now that we're in the directory, let's set our prompt
   #

   $directory=$PWD
   shortname=${directory#$HOME}  #Possible Subdir of $HOME

   if [ "$shortName" = "" ]  #This is the HOME directory
   then
        prompt="~$logname"   # Or maybe just "~". Your choice
   elif [ "$shortName" = "$directory" ] #Not a subdir of $HOME
   then
        prompt="$directory"
   else
        prompt="~$shortName"
   fi
   PS1="$logname@$hostname:$prompt$ "  #You put it together the way you like
}

alias cd="_cd"

이렇게하면 프롬프트를 동등한 배쉬로 설정합니다 PS1="\u@\h:\w$ ". 예쁘지는 않지만 작동합니다.

Env = ~/.kshrc, 그런 다음 .kshrc에서 :

function _cd {
  \cd "$@"
  PS1=$(
    print -n "$LOGNAME@$HOSTNAME:"
    if [[ "${PWD#$HOME}" != "$PWD" ]]; then
      print -n "~${PWD#$HOME}"
    else
      print -n "$PWD"
    fi
    print "$ "
  )
}

alias cd=_cd

cd "$PWD"

브래드

HOST=`hostname`
PS1='$(print -n "[${USER}@${HOST%%.*} ";[[ "$HOME" == "$PWD" ]] && print -n "~" ||([[ "${PWD##*/}" == "" ]] && print -n "/" || print -n "${PWD##*/}");print "]$")'
PS1=`id -un`@`hostname -s`:'$PWD'$

그리고...

대부분의 노력을 위해 두 개의 쉘 사이에서 작업하고 [KSH 및 Bourne SH] 명령 줄의 디렉토리 추적 디스플레이를 원한다면 PWD를 KSH에서 쉽게 대체 할 수 있으며 SH에/usr/xpg4/bin/sh를 사용하는 경우 쉘, 그것은 거기에서도 작동합니다

이 시도:


PS1="\H:\W"

자세한 정보 : 방법 : 변경 / 설정 BASH 사용자 정의 프롬프트, 나는 당신이 KSH라고 말했지만, 그것이 효과가있을 것이라고 확신합니다.

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