Come visualizzare personalizzato pronta a KornShell per mostrare nome host e directory corrente?
-
19-09-2019 - |
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?
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 cheENV="$HOME/.kshrc"; export ENV
è impostato. Questo è probabilmente impostato correttamente per voi. -
Nel file
.kshrc
, vi ritroverete a fare due cose- Ti verrà definisce una funzione chiamata
_cd
. Questa funzione cambierà nella directory specificata, e quindi impostare la variabile PS1 in base alla propria pwd. - Ti verrà configurando un
cd
alias per eseguire la funzione_cd
.
- Ti verrà definisce una funzione chiamata
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
Prova questo:
PS1="\H:\W"
Più informazioni su: Procedura: Modifica / Setup bash prompt personalizzato , so che hai detto ksh, ma sono abbastanza sicuro che funzionerà.