更改后的Echo目录?

时间:2014-02-21 08:26:26

标签: bash shell command-line

(因为我无法在任何地方找到明确的答案,我发现它很有用,但我会把它添加到SO中。更好的替代品欢迎。)

在Bash中,如何更改别名cd以在更改后回显新的工作目录?像这样:

$ pwd
/some/directory
$ cd newness
/some/directory/newness
$

alias cd='cd "$@" && pwd'这样简单的东西不起作用。出于某种原因,Bash会像使用cd -一样回复并返回$OLDPWD,然后你会陷入循环中。我不明白这种行为。

2 个答案:

答案 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

显然,这不是你想要的,而是你需要求助于某个功能的原因。