Ответ 1
Из чтения страницы пользователя ksh вы хотите
PS1="${HOSTNAME}:\${PWD##*/} \$ "
Протестировано по умолчанию ksh на SunOS 5.8
Я использую KornShell (ksh) в Solaris, и в настоящее время мой PS1 env var:
PS1="${HOSTNAME}:\${PWD} \$ "
И появится приглашение: hostname:/full/path/to/current/directory $
Однако я бы хотел, чтобы он отображал: hostname:directory $
Другими словами, как я могу отобразить только имя хоста и имя текущего каталога, т.е. tmp
или ~
или public_html
и т.д. и т.д.?
Из чтения страницы пользователя ksh вы хотите
PS1="${HOSTNAME}:\${PWD##*/} \$ "
Протестировано по умолчанию ksh на SunOS 5.8
Хорошо, немного старое и немного поздно, но это то, что я использую в Kornshell:
PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")'
Это делает приглашение, эквивалентное PS1="\[email protected]\h:\w\n$ "
в BASH.
Например:
[email protected]:~
$ cd bin
[email protected]:~/bin
$ cd /usr/local/bin
[email protected]:/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="\[email protected]\h:\w$ "
в BASH:
[email protected]:~$ cd bin
[email protected]:~/bin$ cd /usr/local/bin
[email protected]:/usr/local/bin$
Не так просто, как настроить приглашение BASH, но вы получите эту идею. Просто напишите script для PS1
, и Kornshell выполнит его.
Я обнаружил, что вышеописанное не работает на Solaris. Вместо этого вам придется сделать это реальным хакерским способом...
В .profile
убедитесь, что ENV="$HOME/.kshrc"; export ENV
установлен. Это, вероятно, правильно настроено для вас.
В вашем файле .kshrc
вы будете делать две вещи
_cd
. Эта функция изменится на указанный каталог, а затем установите переменную PS1 на основе вашего pwd.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 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="[email protected]$hostname:$prompt$ " #You put it together the way you like
}
alias cd="_cd"
Это приведет к тому, что ваше приглашение станет равнозначным BASH PS1="\[email protected]\h:\w$ "
. Это не очень, но он работает.
ENV = ~/.kshrc, а затем в вашем .kshrc:
function _cd {
\cd "[email protected]"
PS1=$(
print -n "[email protected]$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 и если вы используете /usr/xpg 4/bin/sh для своего sh SHELL, он также будет работать там
Попробуйте следующее:
PS1="\H:\W"
Дополнительная информация: Как изменить/настроить bash пользовательское приглашение, я знаю, что вы сказали ksh, но я уверен он будет работать.