Kornshell에서 프롬프트를 사용자 정의하는 방법은 호스트 이름과 현재 디렉토리를 표시하는 방법은 무엇입니까?
-
19-09-2019 - |
문제
나는 Solaris에서 Kornshell (KSH)을 사용하고 있으며 현재 내 PS1 Env var는 다음과 같습니다.
PS1="${HOSTNAME}:\${PWD} \$ "
그리고 프롬프트가 표시됩니다. hostname:/full/path/to/current/directory $
그러나 표시하고 싶습니다. hostname:directory $
다시 말해, 호스트 이름과 현재 디렉토리의 이름 만 표시하는 방법, 즉 tmp
또는 ~
또는 public_html
기타?
해결책
다른 팁
좋아, 조금 늙고 조금 늦었지만, 이것이 내가 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
파일, 당신은 두 가지 일을 할 것입니다- 당신은 호출되는 함수를 정의 할 것입니다
_cd
. 이 기능은 지정된 디렉토리로 변경 된 다음 PWD를 기반으로 PS1 변수를 설정합니다. - 당신은 별명을 설정할 것입니다
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를 사용하는 경우 쉘, 그것은 거기에서도 작동합니다