我正在寻找一种方法来更改cd的默认目录,我想知道这是否可行。我尝试添加
alias "cd=cd ~/Documents/Github"
到.bashrc,但这显然不起作用,因为它打破了cd命令,因此除了转到该目录之外你不能使用cd。是否有一些导出我可以放入.bashrc来执行此操作?我不想更改我的主目录,只是默认目录cd转到。我问,因为我经常使用cd来更改我正在编程的默认目录,并且每次我想要更改时都不必键入cd ~/workspace
或cd
然后cd workspace
到目录~/workspace
。
答案 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
,或者其他什么