Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash-cd命令不工作?_Bash_Unix - Fatal编程技术网

bash-cd命令不工作?

bash-cd命令不工作?,bash,unix,Bash,Unix,我在处理我的bash_概要文件中的$PATH变量时(我想…),不知怎么搞砸了bash。据我记忆所及,我所做的只是在$PATH变量中添加一个目录。请帮忙 以下是我将cd放入不同目录时得到的信息 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

我在处理我的bash_概要文件中的$PATH变量时(我想…),不知怎么搞砸了bash。据我记忆所及,我所做的只是在$PATH变量中添加一个目录。请帮忙

以下是我将cd放入不同目录时得到的信息

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_配置文件以撤销我所做的任何事情时发生的情况

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恢复正常工作之前,我已经完蛋了

/usr/bin/emacs.bash\u profile
或类似文件应在
路径
中断时工作。

/usr/bin/emacs.bash\u profile
或类似文件应在
路径
中断时工作。

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

变量
$PATH
告诉shell在何处查找命令。如果你只是通过告诉它完整的路径来绕过它,它应该会工作。试试
/usr/bin/emacs.bash\u profile

我想,您已经以使用
dirname
find
的方式定义了$PROMPT\u命令(可能在.bashrc中)。 这可以解释
cd
的行为


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

我想,您已经以使用
dirname
find
的方式定义了$PROMPT_命令(可能在.bashrc中)。 这可以解释
cd
的行为


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

当您制作
cd
时,您会得到许多其他信息。由于您使用的是BASH,因此可能存在两个问题:

  • 您已经定义了
    提示符命令
    。尝试取消定义它:

    $unset PROMPT_命令

  • 有一个
    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"
PATH="/my/directory:$PATH"
很难看,不是吗?对于BASH,您不必经历所有这些,但是这在BASH中也起作用,我看到过这样做的地方,或者是出于对惯性的无知

试试这个:

$ type cd
你要么得到

$type cd
cd is a shell builtin
否则你会被解雇的

$ type cd 
cd is an alias for ....
至于更新
$PATH
,您可能忘记了将
$PATH
放回新定义中,或者因为某人的目录名中有空格,所以使用引号。您的路径设置应如下所示:

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"
PATH="/my/directory:$PATH"
有人说应该是:

PATH="$PATH:/my/directory"

当你制作一张
cd
,你会得到一大堆其他的东西。由于您使用的是BASH,因此可能存在两个问题:

  • 您已经定义了
    提示符命令
    。尝试取消定义它:

    $unset PROMPT_命令

  • 有一个
    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"
PATH="/my/directory:$PATH"
很难看,不是吗?对于BASH,您不必经历所有这些,但是这在BASH中也起作用,我看到过这样做的地方,或者是出于对惯性的无知

试试这个:

$ type cd
你要么得到

$type cd
cd is a shell builtin
否则你会被解雇的

$ type cd 
cd is an alias for ....
至于更新
$PATH
,您可能忘记了将
$PATH
放回新定义中,或者因为某人的目录名中有空格,所以使用引号。您的路径设置应如下所示:

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"
PATH="/my/directory:$PATH"
有人说应该是:

PATH="$PATH:/my/directory"