Domanda

Sto usando KornShell (ksh) su Solaris e Attualmente il mio PS1 env var è:

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

E viene visualizzato il prompt: hostname:/full/path/to/current/directory $

Tuttavia, vorrei che alla visualizzazione: hostname:directory $

In altre parole, come posso visualizzare solo il nome host e il nome della directory corrente, vale a dire tmp o ~ o public_html ecc ecc?

È stato utile?

Soluzione

Dalla lettura del href="http://www.manpagez.com/man/1/ksh/" rel="noreferrer"> pagina man vuoi

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

Testato su ksh default su SunOS 5.8

Altri suggerimenti

Va bene, un po 'vecchio e un po' tardi, ma questo è quello che io uso in KornShell:

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

Questo fa una richiesta che è equivalente a PS1="\u@\h:\w\n$ " in BASH.

Ad esempio:

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

mi piace un prompt di due righe, perché a volte ho i nomi delle directory molto lunghi, e possono prendere un sacco di riga di comando. Se si desidera un prompt di una riga, basta lasciare fuori il "\ n" sull'ultima istruzione print:

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

Questo è equivalente a PS1="\u@\h:\w$ " in bash:

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

Non è così facile come la creazione di un prompt BASH, ma si ottiene l'idea. È sufficiente scrivere uno script per PS1 e KornShell lo esegue.


Per Solaris e altri più vecchi versioni di KornShell

ho scoperto che quanto sopra non funziona su Solaris. Invece, dovrete farlo il vero modo hacker ...

  • Nel vostro .profile, assicurarsi che ENV="$HOME/.kshrc"; export ENV è impostato. Questo è probabilmente impostato correttamente per voi.

  • Nel file .kshrc, vi ritroverete a fare due cose

    1. Ti verrà definisce una funzione chiamata _cd. Questa funzione cambierà nella directory specificata, e quindi impostare la variabile PS1 in base alla propria pwd.
    2. Ti verrà configurando un cd alias per eseguire la funzione _cd.

Questa è la parte rilevante del file .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"

Questo imposterà il prompt come PS1="\u@\h:\w$ " BASH equivelent. Non è abbastanza, ma funziona.

ENV = ~ / .kshrc, e poi nella vostra .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'$

e ...

se si lavora tra i due gusci per la maggior parte del vostro sforzo [ksh e bourne sh] e il desiderio di un display di monitoraggio directory sulla linea di comando quindi PWD può essere sostituito facilmente in ksh e se si utilizza / usr / XPG4 / bin / sh per la shell sh, funzionerà là pure

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top