Comment afficher CUSTOM PROMPT dans KornShell pour afficher le nom d'hôte et le répertoire en cours?
-
19-09-2019 - |
Question
J'utilise KornShell (ksh) sur Solaris et actuellement mon env PS1 var est:
PS1="${HOSTNAME}:\${PWD} \$ "
L'invite affiche: hostname:/full/path/to/current/directory $
Cependant, je voudrais à l'affichage: hostname:directory $
En d'autres termes, comment puis-je afficher uniquement le nom d'hôte et le nom du répertoire courant, à savoir tmp
ou ~
ou public_html
etc etc?
La solution
De la lecture ksh page man que vous voulez
PS1="${HOSTNAME}:\${PWD##*/} \$ "
Testé sur ksh par défaut sur SunOS 5.8
Autres conseils
D'accord, un peu vieux et un peu en retard, mais ce que j'utilise dans Kornshell:
PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")'
Cela fait une invite qui est équivalent à PS1="\u@\h:\w\n$ "
dans BASH.
Par exemple:
qazwart@mybook:~
$ cd bin
qazwart@mybook:~/bin
$ cd /usr/local/bin
qazwart@mybook:/usr/local/bin
$
Je vous invite à deux lignes parce que j'ai parfois très longs noms de répertoire, et ils peuvent prendre beaucoup de la ligne de commande. Si vous souhaitez une invite d'une ligne, laissez juste à côté de la « \ n » sur la dernière instruction d'impression:
PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "$ ")'
C'est équivalent à PS1="\u@\h:\w$ "
en BASH:
qazwart@mybook:~$ cd bin
qazwart@mybook:~/bin$ cd /usr/local/bin
qazwart@mybook:/usr/local/bin$
Il est pas tout à fait aussi facile que la mise en place d'une invite de BASH, mais vous voyez l'idée. Il suffit d'écrire un script pour PS1
et Kornshell va l'exécuter.
Pour Solaris et d'autres anciens Versions de Kornshell
Je trouve que le ci-dessus ne fonctionne pas sous Solaris. Au lieu de cela, vous devrez le faire à la vraie hackish ...
-
Dans votre
.profile
, assurez-vous queENV="$HOME/.kshrc"; export ENV
est réglé. Ceci est probablement configuré correctement pour vous. -
Dans votre fichier
.kshrc
, vous allez faire deux choses- Vous définirez une fonction appelée
_cd
. Cette fonction va changer dans le répertoire spécifié, puis définissez votre variable PS1 en fonction de votre PWD. - Vous allez installer un
cd
alias pour exécuter la fonction_cd
.
- Vous définirez une fonction appelée
Ceci est la partie pertinente du fichier .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"
Cela définira l'invite comme PS1="\u@\h:\w$ "
equivelent BASH. Il est pas joli, mais cela fonctionne.
ENV = ~ / .kshrc, puis dans votre .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"
Brad
HOST=`hostname`
PS1='$(print -n "[${USER}@${HOST%%.*} ";[[ "$HOME" == "$PWD" ]] && print -n "~" ||([[ "${PWD##*/}" == "" ]] && print -n "/" || print -n "${PWD##*/}");print "]$")'
PS1=`id -un`@`hostname -s`:'$PWD'$
et ...
si vous travaillez entre deux coquilles pour la plupart de vos efforts [ksh et bourne sh] et le désir d'un affichage de suivi de répertoire sur votre ligne de commande puis PWD peut être remplacé facilement en ksh et si vous utilisez / usr / xpg4 / bin / sh pour votre poisson SHELL, il fonctionnera là aussi
Essayez ceci:
PS1="\H:\W"
Plus d'informations sur: Comment: Modifier / bash Setup cUSTOM pROMPT, je sais que vous avez dit ksh, mais je suis sûr qu'il fonctionnera.