关于SHELL提示符设置的问题(sh,ksh),我想在提示符前加上当前的工作路径。按几种方法设置了PS1变量以后均只能显示初始路径。
|
just use PS1(PS2)
这得视你的 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 或更新的版本),那么你就可
以用一个 shell function 来造你自己的命令,譬如 "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 login shell to read a command file
cat >${CMDFILE?"not set"}