更改cd默认目录(bash)

9

我正在寻找一种改变cd默认目录的方法,想知道是否有可能实现。我尝试在.bashrc中添加

alias "cd=cd ~/Documents/Github" 

但这显然行不通,因为它会破坏cd命令,使其只能用于转到该目录。是否有一些export可以放在.bashrc中来实现这一点?我不想更改我的主目录,只是想更改cd命令的默认目录。我之所以问这个问题,是因为我经常使用cd命令切换到编程中的默认目录,并且不想每次都输入cd ~/workspacecd 然后再输入cd workspace


2
使用新的别名:alias cdd="cd /your/new/dir" - fedorqui
我也考虑过这个,但我宁愿不用不同的命令来切换到那个目录。谢谢。 - Jay
3个回答

17

这里有一个更简单的替代方法,使用 别名

alias cd='HOME=~/Documents/Github cd'
  • 虽然这会重新定义$HOME,但只对cd命令有效,所以应该是安全的(*)。
  • 这也省去了任何自定义参数预解析的需要。

如果您将此放置在~/.bashrc中,应该会获得所需的行为。

请注意,默认情况下,在脚本(非交互式shell)中不会生效此别名,因为别名扩展默认情况下在那里被禁用(使用shopt -s expand_aliases可以显式启用)。


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


除了不能使用别名与 HOME=/somewhere/else cd(说真的,你为什么要这样做?)之外,这比我的shell函数简单多了。 - chepner
+1 其他的答案也有用,但我最喜欢这个。谢谢! - Jay
1
不客气。@chepner:谢谢你,为了完整起见,我已经将它添加到答案中了。 - mklement0
1
关于为什么有人想要这样做...我有一些项目,通常会在特定的项目上工作。我认为如果我有一个简单的方法可以 cd 回到项目的顶级目录,那就太好了。所以,当我开始在一个项目上工作时,我可以执行 PROJECT=pwd,然后编辑下面的 cd 函数,使其默认为 $PROJECT(如果已设置)。 - pedz

5
你可以使用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[@]}"
}

2
是的,~/.bashrc 是适合这个的地方;该文件在每个交互式 shell 启动后立即被调用。 (请注意,您编写的任何脚本都将继续使用真正的 cd,而不是此函数。) - chepner

1
这是默认的主页位置。
$ pwd
/home/######

现在你可以像这样重置它。
$ export HOME=/tmp
$ cd
$ pwd
/tmp

现在就看你想把新的$HOME定义放在哪里了 - .bashrc或其他地方。


3
这不是有点危险吗?如果其他脚本也使用了$HOME,会怎样? - Flash
@Andrew 那也是我的顾虑。我并不想改变主目录,只是更改cd的功能。 - Jay
2
更改 HOME 不是一个好主意。大多数程序将会在 $HOME 中查找它们的配置文件;例如,vim 在启动时将查找 $HOME/.vimrc - chepner
我在一些不寻常的位置安装房屋时做过几次,所以我猜在某些情况下这是可以的。 - Pavel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接