【问题标题】:Change cd default directory (bash) [closed]更改 cd 默认目录(bash)[关闭]
【发布时间】:2026-02-06 18:10:02
【问题描述】:

我正在寻找一种方法来更改 cd 的默认目录,我想知道这是否可能。我尝试添加

别名 "cd=cd ~/Documents/Github" 

到 .bashrc,但这显然不起作用,因为它破坏了 cd 命令,因此您只能使用 cd 访问该目录。是否有一些导出可以放入 .bashrc 来执行此操作?我不想改变我的主目录,只是默认目录 cd 去。我问是因为我经常使用 cd 更改到我正在编程的默认目录,并且不想每次我想更改目录时都键入 cd ~/workspacecd 然后 cd workspace ~/workspace .

【问题讨论】:

  • 使用新别名:alias cdd="cd /your/new/dir"
  • 我也想到了这一点,但我宁愿不必使用不同的命令来 cd 到该目录。不过谢谢

标签: linux bash terminal cd


【解决方案1】:

您可以使用 shell 函数隐藏内置的 cd 命令。将以下内容添加到您的 .bashrc 文件中。

cd () {
    if [ $# = 0 ]; then
        builtin cd ~/Documents/Github
    else
        builtin cd "$@"
    fi
}

这并不完美,因为它假定你永远不会调用函数

* cd -L
* cd -P
* cd -LP
* etc

(即使用一个或多个受支持的选项而没有明确的目录。)


更新

这个可能会更全面一些,但我没有测试过。

cd () {
    local -a args
    while getopts LP opt "$@"; do
        case $opt in
          -*) args+=( "$opt" ) ;;
        esac
    done
    shift $((OPTIND-1))
    # Assume at most one directory argument, since
    # that is all cd uses
    args+=( "${1:-~/Documents/Github}" )

    builtin cd "${args[@]}"
}

【讨论】:

  • 是的,~/.bashrc 是合适的地方;该文件由每个 interactive shell 在启动后立即获取。 (注意,你写的任何脚本都会继续使用真正的cd,而不是这个函数。)
【解决方案2】:

这是默认的家庭位置

$ pwd
/home/######

现在你可以像这样重置它

$ export HOME=/tmp
$ cd
$ pwd
/tmp

现在由您决定将新的 $HOME 定义放在哪里 - .bashrc 或其他任何内容

【讨论】:

  • 那是不是有点危险——如果其他脚本使用$HOME呢?
  • @Andrew 这也是我关心的问题。我真的不想改变主目录,只是改变 cd 的功能。
  • 更改HOME 是个坏主意。大多数程序会在$HOME 中查找它们的配置文件;例如,vim 在启动时查找 $HOME/.vimrc
  • 当房屋安装在一些不寻常的位置时,我做了几次,所以我想在某些情况下没问题。
【解决方案3】:

这是一个使用别名的更简单的替代方法:

alias cd='HOME=~/Documents/Github cd'
  • 虽然这会重新定义 $HOME,但它只针对 cd 命令这样做,因此应该是安全的 (*)。
  • 这也消除了对任何自定义参数预解析的需要。

如果你把它放在~/.bashrc,你应该得到想要的行为。

请注意,默认情况下,此别名在脚本(非交互式shell)中无效,因为默认情况下禁用别名扩展(使用@ 987654325@ 明确启用)。


(*) @chepner 指出了一个限制:使用别名您将无法执行HOME=/somewhere/else cd,即您将无法重新定义(覆盖)$HOME 临时。不过,正如他进一步指出的那样,很难想象为什么会有人想要这样做。

【讨论】:

  • +1 除了不能使用 HOME=/somewhere/else cd 的别名(说真的,你为什么会这样?),这比我的 shell 函数简单得多。
  • +1 其他几个答案也很有效,但我最喜欢这个。谢谢!
  • 我的荣幸。 @chepner:谢谢:为了完整起见,我已将其添加到答案中。
  • 至于为什么有人可能想要... 我有项目,我通常从事特定项目。我认为如果我有一种简单的方法可以 cd 回到项目的*目录可能会很好。所以,当我开始做一个项目时,我可以做 PROJECT=pwd 然后编辑下面的 cd 函数,如果它被设置为默认为 $PROJECT。