Каждая команда завершается с ошибкой «команда не найдена» после изменения .bash_profile?

47

Я обновлял свой .bash_profile, и, к сожалению, я сделал несколько обновлений, и теперь я получаю:

env: bash: No such file or directory
env: bash: No such file or directory
env: bash: No such file or directory
env: bash: No such file or directory
env: bash: No such file or directory
-bash: tar: command not found
-bash: grep: command not found
-bash: cat: command not found
-bash: find: command not found
-bash: dirname: command not found
-bash: /preexec.sh.lib: No such file or directory
-bash: preexec_install: command not found
-bash: sed: command not found
-bash: git: command not found

Мой bash_profile фактически извлекает другие файлы .sh (их источники), поэтому я не совсем уверен, какая модификация могла вызвать это.

Теперь, если я даже пытаюсь и список файлов, я получаю:

>ls
-bash: ls: command not found
-bash: sed: command not found
-bash: git: command not found

Любые советы о том, как отследить источник ошибки и как использовать терминал для базовых операций, таких как перечисление файлов и т. Д.?

Бланкмэн
источник
Что произойдет, если вы используете полный путь, например, так: / bin / ls? И какие изменения вы делали?
КП МакГрегор
2
Да, вставьте свой .bash_profile
января
/ bin / ls перечисляет файлы, но затем я вижу эти 2 строки под ним:-bash: sed: command not found -bash: git: command not found
Blankman
Если ваша проблема была с /etc/environment, используйте следующую команду (в centos 6):ssh -t root@<server-ip> "/bin/bash -c '/bin/mv /etc/environment /tmp/'"
Edenshaw

Ответы:

66

Мне кажется, что в тот или иной момент вы перезаписываете PATHпеременную среды по умолчанию . Тип ошибок, которые у вас есть, указывает, что PATHне содержит данных /bin, где находятся вышеуказанные команды (в том числе bash).

Например, если вы делаете

PATH=/home/user/bin

вместо

PATH="$PATH":/home/user/bin
январь
источник
Я сделал это в один export PATH=PATH:EC2_HOME/bin
прекрасный
2
Вы должны использовать '$' во второй строке PATH - export PATH=$PATH:EC2_HOME/bin
Manula Waidyanatha
странно, как 'ec2-description-region' не работает, даже если он у меня на пути, но все же это работает: $ EC2_HOME / bin / ec2-описывает-регионов Я также сделал перезагрузку источника ....
Blankman
2
Послушай, мы не знаем, что ты делаешь, какие другие файлы ты получаешь, что в них. И да, каждый раз, когда вы исходите из файла, вы добавляете вещи к своему пути (что нормально, потому что обычно .bash_profile будет прочитан только один раз). Пройдите через это один за другим и посмотрите, что произойдет. Кроме того, EC2_HOME не является переменной? Если да, то вы должны предшествовать этому $следующим образом:export PATH=$PATH:$EC2_HOME/bin
января
1
Я теряю счет, сколько раз я зацикливался на этой проблеме и сколько раз этот ответ мне очень помог
Херрготт
21

Один из способов начать отладку сценария bash - запустить подоболочку с параметром -x:

$ bash --login -x

Это покажет вам каждую команду и ее аргументы, которые выполняются при запуске этой оболочки.

Опция --login указана, потому что .bash_profile читается оболочкой входа в систему. Дополнительную информацию об отладке сценариев bash можно найти здесь: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html .

В конечном счете, я думаю, что январское предложение сработает для вас, но эту ссылку стоит прочитать для будущих проблем.

КП МакГрегор
источник
получил это: -bash: bash: команда не найдена
Яссин Корайш
10

Возможно, я нашел проблему. Это сработало для меня, и это может сработать для вас ...

Я по умолчанию с моим редактором в Windows (LF / CR) сохраняет. Поскольку я использую обе системы, это казалось логичным. Когда мне нужно было возиться с моим .bash_profile, я понял, комментируя и пробуя вещи, которые ничего не помогали. Я изменил свои сохранения в формат OS X (только CR) и вуаля! Нет больше "команда не найдена" в терминале!

Это может быть так просто!

cyphire
источник
Очень тонкая вещь, которая сводила меня с ума. Спасибо за добавление этого ответа!
samuel.molinski
Это было то, что я испытывал! Благодарю. Быстрый совет использует эту команду для конвертации файлов в вашей среде unix:$ dos2unix .bash_profile
melwil
Вы уверены, что это то, что вы сделали? Поскольку OS X является Unix, в нем используются окончания строк в стиле Unix с одним символом перевода строки (LF), а не возврат каретки (CR). Единственной популярной операционной системой, в которой использовались последние, были OS 9 и более ранние версии, а приложения Linux / Ubuntu были бы весьма смущены этим.
Дэвид Фёрстер,
6

После я не мог перезапустить. ~ / .bash_profile или любые обычные команды, такие как whoami, grep и т. д. Я нашел способ просто реэкспортировать требуемые пути:

export PATH=/usr/local/jdk/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/cpanel/composer/bin:/usr/local/easy/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin

Это должно работать в большинстве систем, хотя некоторые из этих путей присутствуют не во всех пакетах Linux. Это сработало для меня.

Ananth
источник
4

Я думаю, что я мог бы найти ответ на эту проблему, если бы не вы, а затем другие, у которых есть аналогичные проблемы. Мой ответ на это, что у меня нет .bash_profile.

Поэтому я искал по всей сети, и я нашел решение. Что в основном открыть терминал, наберите touch ~/.bash_profileи нажмите Enter. Это исправило мои проблемы. Надеюсь, это то же самое для вас

Павел
источник
8
LOL ... -bash: touch: команда не найдена
Kumar KL
2

У меня такая же проблема, как и у вас. Я не могу использовать многие популярные команды ( ls, vi/vim..) и не могу редактировать , /root/.bashrcкогда я войти с suв корень.

В заключение. Я нашел решение этой проблемы. Просто войдите в систему root с помощью команды:

su -m

После этого вы можете использовать

vim /root/.bashrc

редактировать PATH.

Удачи!

MrReS
источник
2

У меня такая же проблема. Возможно, вы пропустили $ при экспорте PATH. Вы должны открыть .bash_profile в TextEdit. Если вы не можете найти файл в каталоге, нажмите Ctrl + Shift +>, чтобы показать скрытые файлы.

Затем внесите исправление в PATH и затем сохраните.

В каталоге на терминале введите: source .bash_profile.

Это должно решить проблему.

Kensam
источник
Спасибо, это решило мою проблему, и наконец я смог отредактировать файл bash_profile.
Touseef Murtaza
1

У меня была точно такая же проблема:

Если я положу в lxterminal:

set | grep "jerom/bash"
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jerom/bash/

если я ввел точно такую ​​же команду в tty2, я получил:

set | grep "jerom/bash"
PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/jerom/bash\r

\ r означает конец строки в DOS, поэтому я открыл файл ~/.bashrcи изменил концы строк в Krusader на стиль unix. И это уже работает !!! :-)

DOS EOL создают большие проблемы также в скриптах bash.

xerostomus
источник
1

Я получил ту же проблему только сейчас, после того как я изменил .bash_profile. И я хочу изменить его обратно, но теперь я не могу, потому что я потерял все команды, особенно команду nano и команду vim, поэтому я не могу открыть .bash_profile с командой. И .bash_profileэто скрытый файл, который я не могу открыть с помощью Finder.

Поэтому мне нужно найти способ открыть файл .bash_profile. После того, как я попробовал много способов, я обнаружил, что могу использовать Atom , потому что Atom может читать все файлы в папке проекта, включая скрытые файлы. Так что просто откройте Atom и выберите папку File -> Open, выберите <yourusername>папку, а затем все скрытые файлы, отображаемые в древовидном представлении Atom, включая .bash_profile!! После того, как я удалил последнюю модификацию и снова открыл Терминал, все команды вернулись! :)

backslash112
источник