(因为我在任何地方都找不到明确的答案,而且我发现它很有用,我想我会把它添加到SO中。 欢迎更好的选择。
在 Bash 中,如何在更改后cd
别名以回显新的工作目录? 喜欢这个:
$ pwd
/some/directory
$ cd newness
/some/directory/newness
$
像alias cd='cd "$@" && pwd'
这样简单的东西是行不通的。 出于某种原因,Bash 的反应好像你使用了cd -
并返回$OLDPWD
,你陷入了一个循环。 我不明白这种行为。
显然,您需要通过一个函数来执行此操作:
function mycd() {
cd "$@" && pwd
}
alias cd=mycd
但是,如果您使用 cd -
则最终会打印目录两次,因此这更可靠:
function mycd() {
if [ "$1" == "-" ]; then
cd "$@"
else
cd "$@" && pwd
fi
}
alias cd=mycd
我可能会错过一些边缘情况,例如cd -P -
和cd -L -
,尽管我不知道这些是否有意义。
(请参阅下面的Adrian Frühwirth的回答,了解为什么简单的别名不起作用以及为什么我现在感到愚蠢。
别名不起作用,因为别名不支持参数,因此无法链接需要参数的命令。因此,cd "$@"
在别名的上下文中没有意义,并且您提供给别名的任何参数都会被附加:
$ alias foo='echo "[$@]" && echo'
$ foo bar
[]
bar
显然,这不是您想要的,也正是您需要求助于函数的原因。