(因为我无法在任何地方找到明确的答案,我发现它很有用,但我会把它添加到SO中。更好的替代品欢迎。)
在Bash中,如何更改别名cd
以在更改后回显新的工作目录?像这样:
$ pwd
/some/directory
$ cd newness
/some/directory/newness
$
像alias cd='cd "$@" && pwd'
这样简单的东西不起作用。出于某种原因,Bash会像使用cd -
一样回复并返回$OLDPWD
,然后你会陷入循环中。我不明白这种行为。
答案 0 :(得分:2)
显然,您需要通过以下功能执行此操作:
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 -
,但我不知道这些是否有意义。
(请参阅下面的AdrianFrühwirth的回答,了解为什么简单的别名不起作用以及为什么我现在感到愚蠢。)
答案 1 :(得分:0)
别名不起作用,因为别名不支持参数,因此您无法链接需要参数的命令。因为这个cd "$@"
在别名的上下文中没有意义,你提供给别名的任何参数都会被附加:
$ alias foo='echo "[$@]" && echo'
$ foo bar
[]
bar
显然,这不是你想要的,而是你需要求助于某个功能的原因。