更改cd默认目录(bash)

时间:2014-06-04 13:40:15

标签: linux bash terminal cd

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

alias "cd=cd ~/Documents/Github" 

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

3 个答案:

答案 0 :(得分:9)

这是使用别名

的更简单的替代方法
alias cd='HOME=~/Documents/Github cd'
  • 虽然这会重新定义$HOME,但它仅对cd命令执行此操作,因此应该是安全的(*)。
  • 这也消除了对任何自定义参数预解析的需要。

如果将其放在~/.bashrc中,您应该得到所需的行为。

请注意,默认情况下,此别名在 scripts (非交互式shell)中不起作用,因为别名扩展默认已禁用(使用{ {1}}明确启用)。


(*)@ chepner指出一个限制:如果别名到位,您将无法执行shopt -s expand_aliases,即您将无法重新定义(覆盖)HOME=/somewhere/else cd 再次 ad-hoc 。然而,正如他进一步指出的那样,很难想象为什么有人会想这样做。

答案 1 :(得分:4)

您可以使用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 :(得分:1)

这是默认的家庭住址

$ pwd
/home/######

现在你可以像这样重置它

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

现在取决于你在哪里放置新的$ HOME定义 - .bashrc,或者其他什么