bash - cd命令不起作用?

时间:2012-03-14 19:24:33

标签: bash unix

在我的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

任何帮助都会受到大力赞赏。我完全搞砸了,直到我能再次正常工作!

4 个答案:

答案 0 :(得分:1)

/usr/bin/emacs .bash_profile被破坏时,

PATH或类似物应该有效。

答案 1 :(得分:1)

$PATH变量告诉shell在哪里查找命令。如果你只是通过告诉它完整的路径绕过它,它应该工作。试试/usr/bin/emacs .bash_profile

答案 2 :(得分:1)

当你做cd时,你会得到许多其他东西。由于您使用BASH,因此存在两个可能的问题:

  • 您已定义PROMPT_COMMAND 。试着去取消它:

    $ unset 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"

答案 3 :(得分:0)

我想,您已经使用dirnamefind定义了$ PROMPT_COMMAND(可能在.bashrc中)。 这可以解释cd的行为。

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