“cd”的别名在每次更改目录时显示当前目录?

“cd”的别名在每次更改目录时显示当前目录?

在 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`

它将结果存储pwdcwd变量中,最后

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.

我不知道这是否满足您的“项目需求”,这会阻止您更改常规提示,但这也许是一个选择。

相关内容