2012-03-14 115 views
0

我不知何故設法搞砸了bash,同時在我的bash_profile(我認爲...)中擺弄$ PATH變量。據我所知,我所做的只是將一個目錄添加到$ PATH變量中。請幫忙!bash - cd命令不工作?

這裏就是我得到的,當我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_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 

任何幫助將大規模讚賞。我完全搞砸了,直到我可以再次正常工作了!

回答

1

/usr/bin/emacs .bash_profile或類似的應該在PATH被破壞時工作。

1

$PATH變量告訴shell在哪裏查找命令。如果你只是告訴它完整的路徑,它應該工作。試試/usr/bin/emacs .bash_profile

0

我想,你已經在使用dirnamefind的方式定義$ PROMPT_COMMAND(也許在.bashrc)中。 這將解釋cd的行爲。

find命令默認爲/usr/bin/find。因此,您可以使用它來查找隱含命令的位置並重建您的路徑信息。

1

當你做一個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="[email protected]$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回到新定義或引號中,因爲有人有一個目錄na我有一個空間。路徑設置應該是這樣的:

PATH="/my/directory:$PATH" 

有人說,它應該是:

PATH="$PATH:/my/directory"