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?

Était-ce utile?

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 que ENV="$HOME/.kshrc"; export ENV est réglé. Ceci est probablement configuré correctement pour vous.

  • Dans votre fichier .kshrc, vous allez faire deux choses

    1. 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.
    2. Vous allez installer un cd alias pour exécuter la fonction _cd.

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top