在 tcsh 中,我想要一个别名,pwd
然后我cd
到另一个目录。
以前我为此使用了以下别名,但它也会将 shell 提示符更改为[current directory]>
.由于项目需要,我不能再改变 shell 提示符,但我仍然希望每次cd
.
alias cd 'cd \!* ; set cwd=`pwd`;pwd;set prompt=$cwd:t\ \!\>\ '
我曾尝试使用上述别名来删除它set prompt
,但没有让它工作(我不明白语法)。
答案1
以下对我有用:
alias cd 'cd \!*; set cwd=`pwd`; pwd'
这将替换cd
为运行三个命令的别名:
cd \!*
这会更改目录,
set cwd=`pwd`
它将结果存储pwd
在cwd
变量中,最后
pwd
它打印当前目录。
第二个命令不再有用,因为提示不需要它,所以您可以将其简化为
alias cd 'cd \!*; pwd'
或者更好的是,
alias cd 'cd -p \!*'
它使用-p
选项来打印结果目录。
(请注意,在 中tcsh
,您可以在提示中指定%/
或来获取当前工作目录,而不是将其存储在变量中。在所有情况下都给出完整路径,并在可能的情况下使用简化它。)%~
%/
%~
~
答案2
在 中tcsh
,您可以定义特殊的cwdcmd
钩每次当前工作目录更改时调用的别名:
alias cwdcmd pwd
zsh
复制了这个概念(使用钩子功能代替别名(tcsh
没有功能)):
chpwd() pwd
无论如何,如果您希望提示符具有当前工作目录的尾随部分,则不需要类似的内容。
set prompt='%c !> '
就足够了。另请注意,变量已自行tcsh
设置$cwd
,无需在别名中手动设置cd
。
答案3
另一种选择可能是使用rprompt
,这与提示完全一样,但是在正确的边:
例如set rprompt="%~"
:
% cd /usr/local/bin/ ~
% echo Hello /usr/local/bin
Hello
% /usr/local/bin
您还可以在此使用您的别名 - 任何适用于 的东西都prompt
应该适用于rprompt
.
我不知道这是否满足您的“项目需求”,这会阻止您更改常规提示,但这也许是一个选择。