这得视你的shell而定。有些shell很容易,有些shell很难,有些根本办不到。
C Shell (csh):
将以下的东西加入你的.cshrc 里。
alias setprompt 'set prompt="${cwd}% "'
setprompt # to set the initial prompt
alias cd 'chdir \!* && setprompt'
假如你有用pushd与popd,把底下的东西也加进去。
alias pushd 'pushd \!* && setprompt'
alias popd 'popd \!* && setprompt'
若你的C shell没有$cwd 这个变数,那就得用`pwd`代替之。
若你想要的只是 prompt 里有目前所在目录的最后一个成分
("mail%" 而?nbsp;"/usr/spool/mail%") 则用
alias setprompt 'set prompt="$cwd:t% "'
有些旧版的 csh 将 && 和 || 的意义弄反了。你可以试试看:
false && echo bug
若结果是印出 "bug",那就把 && 和 || 对调,或找一个没有这种
bug 的 csh 来用。
Bourn Shell (sh):
如果你有较新版的 Bourn Shell(SVR2 或更新的版本),那么你就可
以用一个shellfunction 来造你自己的命令,譬如 "xcd":
xcd() { cd $* ; PS1="`pwd` $ ";}
如果你的 Bourn Shell 是比较旧的版本,也是可以做到,但是方法比
较复杂。这里提供一个方法。把以下的内容加入你的 .profile:
LOGIN_SHELL=$$ export LOGIN_SHELL
CMDFILE=/tmp/cd.$$ export CMDFILE
# 16 is SIGURG, pick a signal that's not likely to be
used
PROMPTSIG=16 export PROMPTSIG
trap '. $CMDFILE' $PROMPTSIG
然后把以下的部份写成一个可执行的 script(不需要缩排),名字就
叫做 "xcd",放在你的 PATH 中
: xcd directory - change directory and set prompt
: by signalling the loginshellto read a command file
cat >${CMDFILE?"not set"} <
cd $1
PS1="\`pwd\`$"
EOF
kill -${PROMPTSIG?"not set"} ${LOGIN_SHELL?"not set"}
那么,现在就可已用 "xcd /some/dir" 来改变工作目录了。
Korn Shell (ksh):
把下面这行加入你的 .profile 中: PS1='$PWD $ '
如果你只想显示最后一个部分,那么就用PS1='${PWD##*/} $ '
T Cshell(tcsh)
Tcsh 是常用的 csh 加强版,增加了一些内建变数(及许多其它的功
能):
%~ the current directory, using ~ for $HOME
%/ the full pathname of the current directory
%c or %.the trailing component of the current directory
所以你可以直接用set prompt='%~' BASH (FSF's "Bourne Again Shell")
$PS1中的\w 表示工作目录的完整路径(以 ~ 表示 $HOME);\W 则是表示工作目录的最后一个部份。所以,只要把前面所提有关sh和 ksh 的方法做以下的修改
PS1='\w $ '
或
PS1='\W $ '