更改后的回显目录

  • 本文关键字: bash shell command-line
  • 更新时间 :
  • 英文 :


(因为我在任何地方都找不到明确的答案,而且我发现它很有用,我想我会把它添加到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

显然,这不是您想要的,也正是您需要求助于函数的原因。

相关内容

  • 没有找到相关文章

最新更新