如何防止“ cd”命令转到主目录?


10

关键是有时我会键入cd错误并带我到主目录。

例如,我所在的目录中有一个隐藏目录和一个可见目录,我快速按cd+ tab即可进入主目录


30
如果您cd偶然在某个地方,使用cd -可以返回到先前的位置-bash $OLDPWD为此保留了变量。参见gnu.org/software/bash/manual/bash.html#index-cd
格伦·

4
如果您确实不希望cd执行任何操作,则可以编写一个函数cd,该函数在没有给出任何参数时不执行任何操作,否则调用builtin cd "$@"
glenn jackman

2
真的是个坏主意:HOME =。
约书亚

26
我真诚的最佳建议是在执行命令之前放慢速度并学会检查命令。换句话说:习惯于cd做任何事情。如果您习惯于执行未经仔细检查的命令,那么以后您会遇到更大的麻烦。例如,您想将两个文件移动到第三个目录:mv a b dir/TAB dir补全未如您所愿,您最终将执行mv a b覆盖b。学会小心,学会在按Enter之前先看一下命令。
egmont

1
@Joe我写了一个包装脚本rm,以防止顶层目录,如删除//etc/usr/home/var,等没有密码覆盖。有时我们需要保护自己
免受侵扰

Answers:


14

在下面使用gedit ~/.bashrc并插入以下行:

cd() {
    [[ $# -eq 0 ]] && return
    builtin cd "$@"
}

打开一个新终端,现在当您键入不cd带任何参数的代码时,您只需停留在同一目录中即可。


TL; DR

如果您想变得精巧,可以在不传递任何参数的情况下进入帮助屏幕:

$ 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'

完成此任务的扩展代码为:

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 "$@"
}

6
但是,然后您就可以使您的环境像其他环境一样工作。为什么不调用该函数ncd(对于“ New cd”),而让它保持真实状态cd呢?
waltinator

@waltinator我可以通过警告cd (空白)对的家庭用户以外的人进行不同的处理来改善答案~/.bashrc。您能举一个或两个要注意的例子吗?例如,开发人员cd 在其安装脚本中使用(空白)。(假设的,但我想不出一个案例)。我可以将您的示例汇总为答案,并建议OP ncd始终使用而不是cd
WinEunuuchs2Unix

我喜欢定制东西。这就是Linux的意义所在。但是我有一个严格的个人规则,永远不要更改任何常用命令的功能(无双关语)。当您在另一个系统上工作或其他人在您的系统上工作或为您提供建议时,这会带来问题。我同意@waltinator和其他“好”乔

6

如果是由制表符完成引起的,一种选择是使完成过程立即通过条目进行。这可以使用readline的menu-comple选项代替默认选项来完成complete

bind 'tab: menu-completion'

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

$ cd <tab> # becomes
$ cd .Trash

当然,即使那样,您也必须阅读正在执行的内容。


4

这是我在Windows标题中放置当前目录和用户的方式-您可以根据需要对其进行调整,但是cd -,相当于cd $OLDPWD一个更好的解决方案。

来自我~/.bashrc

# from the "xttitle(1)" man page - put info in window title
update_title()
{
    [[ $TERM = xterm ]] || [[ $TERM = xterm-color ]]  && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}

cd()
{
    [[ -z "$*" ]] && builtin cd $HOME
    [[ -n "$*" ]] && builtin cd "$*"
    update_title
}

4

这里的问题不是cd,也不是技术解决的。

问题是你,这已经由耐心解决了!

如果您经常发现自己键入并提交了您不想要的命令,请练习慢下来。屏住呼吸,阅读您所输入的内容,并在按Enter之前仔细检查。仔细考虑。不要着急

您会发现,这种方法不仅解决了眼前的问题,而且如果继续沿着当前的道路前进,还会遇到其他更糟糕的问题


2
同样,使用数月/年后,您会忘记更改了行为,并且在其他环境中无法正常工作。
pLumo '18 -10-23

@RoVo那也是,好点!
Lightness比赛于

@RoVo这可能会在几天内发生。立即启动双引导,切换到虚拟机...
Joe

@Joe最近我一直在白天在OSX和晚上在Windows之间切换,键盘布局的更改确实令人困惑!
Lightness Races in Orbit

我确定@LightnessRacesinOrbit!我有两个大小几乎相同的不同尺寸的笔记本电脑键盘,这已经够糟糕了。这就是为什么我从未尝试过Dvorak键盘的原因。只是不确定这与问题有什么关系。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.