我在Solaris上使用KornShell(ksh),目前我的PS1 env var是:
PS1="${HOSTNAME}:\${PWD} \$ "
提示符显示: hostname:/full/path/to/current/directory $
不过,我希望它显示: hostname:directory $
换句话说,我怎样才能显示主机名和当前目录的名称,即tmp
或~
或public_html
等等?
从阅读您想要的ksh手册页
PS1 =“$ {HOSTNAME}:\ $ {PWD ## * /} \ $”
测试SunOS 5.8上的默认ksh
好吧,有点老,有点晚,但这是我在Kornshell中使用的:
PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "\n$ ")'
这会在BASH中提示相当于PS1="\u@\h:\w\n$ "
。
例如:
qazwart@mybook:~ $ cd bin qazwart@mybook:~/bin $ cd /usr/local/bin qazwart@mybook:/usr/local/bin $
我喜欢两行提示,因为我有时候会有很长的目录名,而且会占用很多的命令行。 如果你想要一行提示,只要放弃最后一个打印语句中的“\ n”:
PS1='$(print -n "`logname`@`hostname`:";if [[ "${PWD#$HOME}" != "$PWD" ]] then; print -n "~${PWD#$HOME}"; else; print -n "$PWD";fi;print "$ ")'
这相当于BASH中的PS1="\u@\h:\w$ "
:
qazwart@mybook:~$ cd bin qazwart@mybook:~/bin$ cd /usr/local/bin qazwart@mybook:/usr/local/bin$
这不像设置BASH提示那样简单,但是你明白了。 只需为PS1
编写一个脚本,Kornshell将执行它。
我发现以上在Solaris上不起作用。 相反,你必须做到这一点真正的黑客方式…
在.profile
,确保ENV="$HOME/.kshrc"; export ENV
ENV="$HOME/.kshrc"; export ENV
设置。 这可能是为你正确设置的。
在你的.kshrc
文件中,你会做两件事
_cd
的函数。 这个函数会改变到指定的目录,然后根据你的pwd设置你的PS1变量。 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'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"
这会将您的提示设置为等同的BASH PS1="\u@\h:\w$ "
。 这不是漂亮,但它的作品。
ENV =〜/ .kshrc,然后在你的.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"
布拉德
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]的两个shell之间工作,并希望在你的命令行上显示一个目录跟踪显示,那么PWD可以用ksh轻松替换,如果你使用/ usr / xpg4 / bin / sh外壳,它也会在那里工作
尝试这个:
PS1="\H:\W"
更多的信息: 如何:更改/安装bash自定义提示 ,我知道你说的ksh,但我很确定它会工作。