Linux 更改cd默认目录(bash)
我正在寻找一种方法来更改cd的默认目录,我想知道这是否可行。我试着加上 alias "cd=cd ~/Documents/Github" 别名“cd=cd~/Documents/Github”Linux 更改cd默认目录(bash),linux,bash,terminal,cd,Linux,Bash,Terminal,Cd,我正在寻找一种方法来更改cd的默认目录,我想知道这是否可行。我试着加上 alias "cd=cd ~/Documents/Github" 别名“cd=cd~/Documents/Github” 但是这显然不起作用,因为它破坏了cd命令,所以除了转到该目录之外,您不能使用cd执行任何操作。是否有一些出口,我可以投入。bashrc来做这件事?我不想更改我的主目录,只是默认目录cd转到。我这样做是因为我经常使用cd切换到我正在编程的默认目录,并且不希望每次切换到目录~/workspace时都必须键入c
但是这显然不起作用,因为它破坏了cd命令,所以除了转到该目录之外,您不能使用cd执行任何操作。是否有一些出口,我可以投入。bashrc来做这件事?我不想更改我的主目录,只是默认目录cd转到。我这样做是因为我经常使用cd切换到我正在编程的默认目录,并且不希望每次切换到目录
~/workspace
时都必须键入cd~/workspace
或cd
,然后再键入cd workspace
您可以使用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[@]}"
}
这是默认的主位置
$ pwd
/home/######
现在你可以像这样重置它
$ export HOME=/tmp
$ cd
$ pwd
/tmp
现在取决于您将新的$HOME定义放在何处-
.bashrc
,或者其他任何东西这里有一个使用别名的更简单的替代方法:
alias cd='HOME=~/Documents/Github cd'
- 虽然这重新定义了
,但它只对$HOME
命令进行定义,因此应该是安全的(*)cd
- 这也消除了任何自定义参数预解析的需要
~/.bashrc
中,则应获得所需的行为
请注意,默认情况下,此别名在脚本(非交互式Shell)中无效,因为默认情况下在脚本中禁用别名扩展(使用shopt-s expand_alias
显式启用)
(*)@chepner指出了一个限制:有了别名,您将无法执行
HOME=/where/else cd
,也就是说,您将无法再次临时重新定义(覆盖)$HOME
。不过,正如他进一步指出的那样,很难想象为什么会有人想这样做。使用一个新的别名:alias cdd=“cd/your/new/dir”
我也想到了这一点,但我宁愿不必使用不同的命令将cd复制到该目录。谢谢,这不是有点危险吗?如果其他脚本使用$HOME
?@Andrew,那也是我关心的问题。我真的不想更改主目录,只想更改cd的功能。更改主目录是个坏主意。大多数程序将在$HOME
中查找其配置文件;例如,vim
在启动时查找$HOME/.vimrc
。当homes安装在某个不寻常的位置时,我做了几次,所以我想在某些情况下这是可以的。是的,~/.bashrc
将是合适的位置;该文件在启动后立即由每个交互式shell获取。(请注意,您编写的任何脚本都将继续使用真正的cd
,而不是此函数。)+1除了不能将别名与HOME=/where/else cd
(说真的,您为什么要这么做?)之外,这比我的shell函数简单得多。+1其他几个答案也很有效,但我最喜欢这个。谢谢不客气@谢天谢地:为了完整起见,我把它添加到了答案中。至于为什么有人想。。。我有项目,我通常在一个特定的项目上工作。我想,如果我有一个简单的方法将cd放回项目的顶级目录,那就太好了。因此,当我开始处理一个项目时,我可以执行project=pwd
,然后编辑下面的cd函数,如果设置了,则默认为$project。