如何防止“cd”命令进入主目录?

vin*_*aes 11 command-line cd-command

问题是有时我输入cd错误,然后将我带到主目录。

例如,我在一个包含隐藏目录和可见目录的目录中,我快速按cd+tab将我带到主目录

Win*_*nix 15

使用gedit ~/.bashrc并在底部插入这些行:

cd() {
    [[ $# -eq 0 ]] && return
    builtin cd "$@"
}
Run Code Online (Sandbox Code Playgroud)

打开一个新终端,现在当你输入cd不带参数时,你只需停留在同一目录中。


TL; 博士

如果您想详细说明,可以在不传递任何参数时放入帮助屏幕:

$ cd

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level
    
    cd ../..        Move up two directory levels
    
    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'
Run Code Online (Sandbox Code Playgroud)

完成此操作的扩展代码是:

cd() {
    if [[ $# -eq 0 ]] ; then
        cat << 'EOF'

cd: missing operand

Usage:

    cd ~            Change to home directory. Equivelent to 'cd /home/$USER'

    cd -            Change to previous directory before last 'cd' command

    cd ..           Move up one directory level
    
    cd ../..        Move up two directory levels
    
    cd ../sibling   Move up one directory level and change to sibling directory

    cd /path/to/    Change to specific directory '/path/to/' eg '/var/log'

EOF
        return
    fi

    builtin cd "$@"
}
Run Code Online (Sandbox Code Playgroud)

  • 但是你已经让你的环境像其他环境一样工作。为什么不调用函数`ncd`(对于“New cd”),而留下真正的`cd`? (6认同)

mur*_*uru 6

如果是选项卡完成导致了这种情况,一种选择是立即通过条目进行完成循环。这可以使用readline 的menu-comple选项而不是默认值来完成complete

bind 'tab: menu-completion'
Run Code Online (Sandbox Code Playgroud)

然后,在我的主目录中,例如:

$ cd <tab> # becomes
$ cd .Trash
Run Code Online (Sandbox Code Playgroud)

当然,即便如此,您也必须阅读您正在执行的内容。