Jay*_*Jay 6 linux bash terminal cd
我正在寻找一种方法来改变cd的默认目录,我想知道这是否可行.我尝试添加
alias "cd=cd ~/Documents/Github"
到.bashrc,但这显然不起作用,因为它打破了cd命令,因此除了转到该目录之外,你不能使用cd.是否有一些导出我可以放入.bashrc来执行此操作?我不想更改我的主目录,只是默认目录cd转到.我问,因为我经常使用cd切换到我编程在我的默认目录,想不必键入cd ~/workspace
或cd
然后cd workspace
我不想每次都更改为目录~/workspace
.
mkl*_*nt0 12
这是使用别名的更简单的替代方法:
alias cd='HOME=~/Documents/Github cd'
Run Code Online (Sandbox Code Playgroud)
$HOME
,它只对cd
命令这样做,所以应该是安全的(*).如果你放入它~/.bashrc
,你应该得到所需的行为.
请注意,默认情况下,此别名在脚本(非交互式shell)中不起作用,因为默认情况下禁用别名扩展(用于shopt -s expand_aliases
显式启用).
(*)@chepner指出一个限制:在地方的别名,你将不能够这样做HOME=/somewhere/else cd
,也就是说,你将无法重新定义(覆盖)$HOME
再次,特设.然而,正如他进一步指出的那样,很难想象为什么有人会想这样做.
cd
您可以使用 shell 函数隐藏内置命令。将以下内容添加到您的.bashrc
文件中。
cd () {
if [ $# = 0 ]; then
builtin cd ~/Documents/Github
else
builtin cd "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
这并不完美,因为它假设您永远不会将该函数调用为
* cd -L
* cd -P
* cd -LP
* etc
Run Code Online (Sandbox Code Playgroud)
(即,在没有显式目录的情况下使用一个或多个受支持的选项。)
更新
这可能更全面一些,但我还没有测试过。
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[@]}"
}
Run Code Online (Sandbox Code Playgroud)