Почему нет такого файла или directory_profile? - PullRequest
0 голосов
/ 14 сентября 2018

Я использую Windows и MobaXterm.

Я создал файл .bash_profile в каталоге ~ и следующую строку

alias sbp="source ~/.bash_profile"

- единственный код в этом файле.

Однако, когда я пытался сделать sbp, я получил ошибку.

enter image description here

Это работает на моем Mac и раньше работало на моем старом компьютере с Windows (но у него есть повреждение водой, поэтому он сломался). Почему это не работает сейчас?

Заранее спасибо!

1 Ответ

0 голосов
/ 14 сентября 2018

Судя по тому, как сообщение об ошибке искажено, я почти уверен, что созданный вами файл .bash_profile имеет окончания строки в стиле DOS / Windows, состоящие из символа возврата каретки, за которым следует символ перевода строки. Инструменты Unix ожидают окончания строки в стиле Unix, состоящие только из новой строки; если они видят окончания в стиле DOS / Windows, они будут рассматривать возврат каретки как часть содержимого строки. В этом случае bash будет обрабатывать возврат каретки как часть определения псевдонима и, следовательно, часть имени файла для имени файла источнику. Попробуйте запустить alias sbp | cat -vt, чтобы напечатать псевдоним с невидимыми символами, показанными ; я предполагаю, что он напечатает alias sbp='source ~/.bash_profile^M' (где ^M - это способ представления возврата каретки cat -vt).

Решение: преобразуйте файл в формат Unix и либо переключитесь на текстовый редактор, который умеет сохранять в формате Unix, либо измените настройки в текущем редакторе, чтобы сделать это. Для конвертации существует ряд полустандартных инструментов, таких как dos2unix и fromdos. Если у вас их нет, этот ответ имеет несколько других вариантов.

Кстати, причина, по которой сообщение об ошибке искажено, состоит в том, что CR печатается как часть сообщения об ошибке, и терминал воспринимает это как инструкцию возврата к началу строки; затем он печатает остальную часть сообщения поверх начала сообщения. Это немного похоже на это:

-bash: /home/dir/path/.bash_profile
: No such file or directory

... но со второй строкой, напечатанной поверх первой, так получается:

: No such file or directory_profile
...