'\ r': команда не найдена -.bashrc/.bash_profile
У меня есть окна, используя Cygwin, пытаясь установить JAVA_HOME
навсегда через мой файл .bashrc
.
.bashrc:
export PATH="$JAVA_HOME/bin:$PATH"
export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05"
.bash_profile:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
запуск cygwin:
-bash: $'\377\376if': command not found
-bash: $'then\r': command not found
: No such file or directorysu//.bashrc
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi'
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi'
Я не уверен, что я взял команды из учебника, предназначенного для другой системы, или если мне не хватает шага. Или пробелы заставляют мои команды работать неправильно.
Я рассмотрел несколько похожих вопросов, но я не нашел того, где вопрос имеет мою ошибку.
Мой домашний путь:
$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/
Поэтому я считаю, что файлы должны быть помещены в нужное место.
Ответы
Ответ 1
Когда все остальное не работает в Cygwin...
Попробуйте запустить команду dos2unix
в соответствующем файле.
Это может помочь при появлении сообщений об ошибках, подобных этому:
-bash: '\r': command not found
Символы новой строки в стиле Windows могут вызвать проблемы в Cygwin.
Команда dos2unix
изменяет символы новой строки, поэтому они совместимы с Unix/Cygwin.
ПРЕДОСТЕРЕЖЕНИЕ: команда dos2unix изменяет файлы на месте, поэтому при необходимости принимайте меры предосторожности.
Если вам нужно сохранить исходный файл, сначала выполните его резервное копирование.
Примечание для пользователей Mac: Команда dos2unix
не существует в Mac OS X.
Просмотрите этот ответ для различных решений, используя различные инструменты.
Существует также команда unix2dos
, которая делает обратное:
Он изменяет символы новой строки Unix, поэтому они совместимы с инструментами Windows.
Если вы открываете файл с помощью Блокнота и все строки работают вместе, попробуйте unix2dos filename
.
Ответ 2
Для тех, у кого нет dos2unix, установленного (и не хотят его устанавливать):
Удалить конечный символ \r
, который вызывает эту ошибку:
sed -i 's/\r$//' filename
Объяснение
Вариант -i
предназначен для редактирования на месте, мы удаляем конечный \r
непосредственно во входном файле. Поэтому будьте осторожны, чтобы правильно напечатать шаблон.
Ответ 3
Я использую cygwin и Windows7, трюк был НЕ вставлять set -o igncr
в ваш .bashrc, но помещал в него все SHELLOPTS
переменные среды под Windows. (Так что ничего с unix/cygwin...) Я думаю, что это не работает от .bashrc
, потому что "капли уже сосать"
как мы говорим на немецком языке.;-)
Итак, мой SHELLOPTS
выглядит следующим образом:
braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
Ответ 4
Для пользователей WINDOWS с Notepad++ (проверено с v6.8.3) вы можете исправить определенный файл, используя опцию - Правка → Преобразование EOL → Формат Unix/OSX
И сохраните ваш файл снова.
Изменение: все еще работает в v7.5.1 (29 августа 2017 г.)
Ответ 5
Если вы используете недавний Cygwin (например, 1.7), вы также можете запустить оба .bashrc
и .bash_profile
со следующей строкой в первой строке без комментариев:
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
(set -o igncr) 2>/dev/null && set -o igncr; # this comment is needed
Это заставит bash игнорировать символы возврата каретки (\r
), используемые в разделителях строк Windows.
См. http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html.
Ответ 6
SUBLIME TEXT
С возвышенным вы просто переходите к
Вид → Линейные окончания → (выберите) Unix
Затем сохраните файл. Устранить эту проблему.
Просто, как это!
Ответ 7
Вы также можете добавить опцию -o igncr
к вызову bash, например.
bash -x -o igncr script.sh
Ответ 8
Ошибка:
'\r'
: команда не найдена
вызвано тем, что оболочка не может распознать окончания строк, подобные Windows CRLF (0d 0a
), так как она ожидает только LF
(0a
).
Гит
Если вы используете Git в Windows, убедитесь, что вы выбрали "Оформить заказ как есть" во время установки. Затем убедитесь, что вы запустили: git config --global core.autocrlf false
, чтобы Git не выполнял никаких преобразований при извлечении или фиксации текстовых файлов.
dos2unix
Если вы не используете Git, вам просто нужно преобразовать эти уязвимые файлы/сценарии обратно в Unix-подобные окончания строк (LF), либо:
dos2unix ~/.bashrc
Примечание. Команда dos2unix
является частью пакета dos2unix
.
Ex/Vim редактор + tr
Если вы установили Vim, следующая команда должна исправить файлы:
ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*
Полезный псевдоним: alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa"
.
tr
Вот метод с использованием tr
:
cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc
или же:
tr -d '\r' < filename > new_filename
Примечание: \r
эквивалентно \015
.
sed
Вы можете попробовать следующую команду:
sed -i'.bak' s/\r//g ~/.bash*
recode
Могут быть полезны следующие псевдонимы (которые заменяют команду dos2unix
):
alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'
Источник: бесплатные инструменты Unix (ssh, bash и т.д.) Под Windows.
perl
Следующая команда perl
может преобразовать файл из DOS в формат Unix:
perl -p -i.bak -e 's/\015//g' ~/.bash*
Источник: зачистка ^ M.
tofrodos
В Linux, как Ubuntu, который не входит в стандартную комплектацию с dos2unix
или unix2dos
, вы можете установить пакет tofrodos
(sudo apt-get install tofrodos
) и определить следующие псевдонимы:
alias dos2unix=fromdos
alias unix2dos=todos
Затем используйте тот же синтаксис, что и выше.
бродяга
Если вы используете Vagrant VM, и это происходит для сценария инициализации, попробуйте установить для binary
параметра значение true
:
# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html
config.vm.provision "shell" do |s|
s.binary = true # Replace Windows line endings with Unix line endings.
s.path = "script.sh"
end
См.: Windows CRLF для Unix LF Проблемы в Vagrant.
Ответ 9
Согласно этой сути, решение состоит в том, чтобы создать ~/.bash_profile
(в каталоге HOME
), который содержит:
export SHELLOPTS
set -o igncr
Ответ 10
попробуйте выполнить следующую команду
vim .bashrc
:set ff=unix
:wq!
Ответ 11
Решено с помощью Notepad ++:
1) Menu- > Edit- > EOL Conversion → Unix/OSX Format
2) Затем сохраните
Исправлено
Ответ 12
люди, которые используют блокнот ++ (6.8.1) для отправки сценариев оболочки из окон в Linux.
установить в блокнот ++
Edit → EOL Conversion → Unix/OSX format
Ответ 13
У меня была та же проблема. Решение: я редактирую файл с помощью редактора pspad и даю ему формат unix (Меню - Формат → UNIX)
Я считаю, что вы можете установить этот формат в свой файл со многими другими редакторами
Ответ 14
Для пользователей Emacs:
- Откройте файл
- M-x set-buffer-file-coding-system
- Выберите "unix"
Это обновит новые символы в файле, который станет стилем unix. Более подробную информацию о "представлении Newline" в Emacs можно найти здесь:
http://ergoemacs.org/emacs/emacs_line_ending_char.html
Примечание. Вышеупомянутые шаги могут быть сделаны в Emacs script, если вы предпочитаете выполнять это из командной строки.
Ответ 15
В EditPlus вы делаете это из
Document → File Format (CR/LF) → Change File Format...
, а затем выберите переключатель Unix / Mac OS X
.
Ответ 16
Проблема может произойти из-за того, что файл / script создан/загружен с Windows-машины. Попробуйте конвертировать в формат файла Linux.
dos2unix ./script_name.sh
или
dos2unix ~/.bashrc
Ответ 17
1. Выбор
EditorConfig - это мой выбор.
2. Актуальность
Этот ответ актуален для марта 2018 года. В будущем данные из этого ответа могут устареть.
Автор этого ответа лично использовал EditorConfig в марте 2018 года.
3. Ограничения
Вам необходимо использовать один из поддерживаемых IDE/редакторов.
4. Аргументация
- Просто использование. Мне нужно установить свой файл
.editorconfig
1 раз, когда я создаю свой проект, → я могу забыть некоторые проблемы platform-, style- и IDE. - Кроссплатформенность, кросс-языки, кросс-IDE, кросс-редакторы.
5. Пример
5.1. просто
Я устанавливаю плагин EditorConfig для Sublime Text → мой текстовый редактор. Я редактирую файлы в Sublime Text.
Например, у меня есть файл sashacrlf.sh
:
echo "Sasha" &
echo "Goddess!" &
Я запускаю этот файл в Cygwin:
$ bash sashacrlf.sh
Sasha
sashacrlf.sh: line 1: $'\r': command not found
Goddess!
Я создаю файл .editorconfig
в том же проекте, что и sashacrlf.sh
.
[*.sh]
end_of_line = lf
Это означает, что если вы сохраняете какой-либо файл с расширением .sh
в своем проекте в редакторе, EditorConfig устанавливает для этого файла окончания строк UNIX.
Я sashacrlf.sh
сохраняю sashacrlf.sh
в своем текстовом редакторе. Я снова запускаю sashacrlf.sh
:
$ bash sashacrlf.sh
Sasha
Goddess!
Я не могу получить неожиданный вывод в консоли.
5.2. Несколько расширений файлов
Например, я хочу иметь окончания строк UNIX во всех файлах с расширениями .sh
, .bashrc
и .bash_profile
. Я добавляю эти строки в мой файл .editorconfig
:
[*.{sh,bashrc,bash_profile}]
end_of_line = lf
Теперь, если я сохраню какой-либо файл с расширением .sh
, .bashrc
или .bash_profile
, EditorConfig автоматически установит окончание строки UNIX для этого файла.
6. Дополнительные ссылки
Ответ 18
Может быть, вы использовали notepad++ для создания/обновления этого файла.
EOL (Edit-> EOL Conversion) Преобразованием по умолчанию является Windows.
Изменить преобразование EOL в notepad++
Edit -> EOL Conversion -> Unix (LF)
Ответ 19
Если у вас установлен пакет vim в вашей установке Cygwin, вы можете использовать vim, чтобы исправить это без поиска и замены. Запустите vim следующим образом: vim filename.sh
(часто это также псевдоним vi). Затем введите :set fileformat=unix
, затем :wq
(write & quit), чтобы сохранить изменения. (The :
переводит вас в режим редактирования vim.)
Я рекомендую это по сравнению с dos2unix, поскольку vim, вероятно, чаще устанавливается.
Однако, вероятно, рекомендуется настроить текстовый редактор так, чтобы он сохранял файлы, которые вы планируете использовать в среде Unix/Linux, чтобы иметь текстовый формат Unix. Ответы, приведенные выше для Notepad++, являются хорошим примером.
Дополнительное примечание: если вы не уверены, какой тип файла (DOS или Unix), вы можете использовать file filename.sh
. Это может особенно помочь в отладке более неясных проблем (таких как проблемы с кодированием при импорте дампов SQL, поступающих из Windows).
Другие варианты изменения форматирования текстовых файлов см. В этой статье базы знаний IU.
Дополнительная справочная информация о скриптах Bash и окончаниях строк содержится в fooobar.com/info/877/....