команда bash - cd не работает? - PullRequest
0 голосов
/ 14 марта 2012

Мне как-то удалось испортить bash, пока я возился с переменной $ PATH в моем bash_profile (я думаю ...). Насколько я помню, все, что я делал, это добавлял каталог в переменную $ 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!

Ответы [ 4 ]

1 голос
/ 15 марта 2012

Когда вы делаете cd, вы получаете кучу других вещей.Поскольку вы используете BASH, есть две возможные проблемы:

  • У вас есть PROMPT_COMMAND определено .Попробуйте определить:не имейте хороших символов с обратной косой чертой, которые вы можете вставить в строку приглашения.Если вы хотите, чтобы в вашем приглашении было указано имя вашего каталога.

Вы должны были сделать что-то вроде этого:

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"
1 голос
/ 14 марта 2012

Переменная $PATH сообщает оболочке, где искать команды.Если вы просто обойдете это, указав полный путь, это должно сработать.Попробуйте /usr/bin/emacs .bash_profile.

1 голос
/ 14 марта 2012

/usr/bin/emacs .bash_profile или подобное должно работать, когда PATH сломан.

0 голосов
/ 14 марта 2012

Полагаю, вы определили $ PROMPT_COMMAND (возможно, в .bashrc) таким образом, чтобы использовать dirname и find. Это объясняет поведение cd.

Команда find по умолчанию указана в /usr/bin/find. Таким образом, вы можете использовать его, чтобы найти расположение ваших важных команд и восстановить информацию о вашем пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...