在我的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
任何帮助都会受到大力赞赏。我完全搞砸了,直到我能再次正常工作!
答案 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)
我想,您已经使用dirname
和find
定义了$ PROMPT_COMMAND(可能在.bashrc中)。
这可以解释cd
的行为。
默认情况下,find
命令位于/usr/bin/find
。因此,您可以使用它来查找重要命令的位置并重建路径信息。