'\ 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 EditorConfig - это мой выбор.


2. Актуальность

Этот ответ актуален для марта 2018 года. В будущем данные из этого ответа могут устареть.

Автор этого ответа лично использовал EditorConfig в марте 2018 года.


3. Ограничения

Вам необходимо использовать один из поддерживаемых IDE/редакторов.


4. Аргументация

  1. Просто использование. Мне нужно установить свой файл .editorconfig 1 раз, когда я создаю свой проект, → я могу забыть некоторые проблемы platform-, style- и IDE.
  2. Кроссплатформенность, кросс-языки, кросс-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/....