繁体   English   中英

bash-cd命令不起作用?

[英]bash - cd command not working?

我以某种方式设法在bash_profile中摆弄$ PATH变量时弄糟了bash(我认为...)。 据我所记得,我所做的就是将目录添加到$ PATH变量中。 请帮忙!

这是我进入各种目录时所得到的

my-MacBook-Pro:~ myuser$ cd .rvm
-bash: dirname: command not found
-bash: find: command not found
my-MacBook-Pro:.rvm myuser$ cd
-bash: find: command not found

当我尝试进入.bash_profile撤消我所做的一切时,会发生以下情况...

my-MacBook-Pro:~ myuser$ emacs .bash_profile
-bash: emacs: command not found

my-MacBook-Pro:~ myuser$ sudo emacs .bash_profile
-bash: sudo: command not found

任何帮助将不胜感激。 我完全不知所措,直到bash可以再次正常工作!

PATH中断时, /usr/bin/emacs .bash_profile或类似文件应该可以工作。

$PATH变量告诉外壳程序在哪里查找命令。 如果只是通过告诉它完整的路径来绕过它,那么它应该可以工作。 试试/usr/bin/emacs .bash_profile

当您执行cd ,您会得到很多其他的东西。 由于您正在使用BASH,因此存在两个可能的问题:

  • 您已定义PROMPT_COMMAND 尝试取消定义:

    $未设置PROMPT_COMMAND

  • cd命令有一个别名 :这在Kornshell中很常见,在那里您没有可以放在提示字符串中的漂亮的反斜杠字符。 如果您希望在提示符下输入目录名称。

您必须执行以下操作:

function _cd
{
    logname="$(logname)"
    hostname="$(hostname)"
    directory="$1"
    pattern="$2"

    if [ "$pattern" ]        #This is a substitution!
    then
        \cd "$directory" "$pattern"
    elif [ "$directory" ]
    then
        \cd "$directory"
    else
        \cd
    fi
    directory=$PWD
    shortName=${directory#$HOME}

    if [ "$shortName" = "" ]
    then
        prompt="~$logname"
    elif [ "$shortName" = "$directory" ]
    then
        prompt="$directory"
    else
        prompt="~$shortName"
    fi
    title="$logname@$hostname:$prompt"
    PS1="$title
$ "
}

alias cd="_cd"

丑陋不是吗? 对于BASH,您不必经历所有这些事情,但是这在BASH中也适用,而且我已经看到了这样做的地方是出于对惯性的无知。

尝试这个:

$ type cd

你要么得到

$type cd
cd is a shell builtin

否则你会得到

$ type cd 
cd is an alias for ....

至于$PATH的更新,您可能忘记了将$PATH放回新的定义或引号中,因为有人在目录名中带有空格。 您的PATH设置应如下所示:

PATH="/my/directory:$PATH"

有人说应该是:

PATH="$PATH:/my/directory"

我猜想,您已经使用dirnamefind的方式定义了$ PROMPT_COMMAND(也许在.bashrc中)。 那可以解释cd的行为。

find命令默认在/usr/bin/find 因此,您可以使用它来找到重要命令的位置并重建路径信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM