Объединение домашних каталогов прерывает Readline / .bashrc [дубликат]

За последние несколько дней я объединил домашний каталог из рабочей установки 12.04 со старым домашним каталогом, я полагаю, из установки 10.04 (это был голый драйвер)

Я получил новый диск для загрузки и смонтировать правильно, но когда я пытаюсь использовать записи .bashrc из установки 12.04, возникают такие вещи, как следующий псевдоним:

alias banana='echo banana'

Он вызывает следующие ошибки:

-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
: invalid shell option name
-bash: $'\r': command not found
-bash: $'\r': command not found
: invalid shell option name
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: $'\r': command not found
-bash: .bashrc: line 36: syntax error near unexpected token `$'in\r''
'bash: .bashrc: line 36: `case "$TERM" in

Я не могу найти текст, на который есть ссылка в этом .bashrc (он работает только тогда, когда я копирую его из / etc / skel, и даже тогда, после добавления псевдонима и источника, а затем удаления псевдонима и источника, он по-прежнему вызывает ошибки. Единственный способ снова заставить Bash работать - это повторно скопируйте файл из / etc / skel

Похоже, я не могу внести какие-либо изменения в .bashrc, не вызывая этих ошибок. Я подозреваю, что это как-то связано с readline или .inputrc, у которых также были проблемы (хотя, похоже, сейчас они решены.) На данный момент в каталоге / home / user нет .inputrc.

Спасибо за любую помощь, которую вы можете оказать!

1
задан 8 November 2013 в 22:27

3 ответа

Попробуйте:

sed -i -e 's/\r$//' ~/.bashrc

Это удалит окончания строк в стиле Windows (символы CR - \r). Теперь, если вы source ~/.bashrc, вы не должны получать никаких ошибок.

Затем, прежде чем копировать любой контент из другого файла, выполните ту же команду для этого файла:

sed -i -e 's/\r$//' /path/to/file_from_where_you_copy
0
ответ дан 8 November 2013 в 22:27

Файл кажется довольно грязным. Вы можете просто удалить файл и скопировать новый из /etc/skel:

rm ~/.bashrc
cp /etc/skel/.bashrc ~/.bashrc

Затем отредактируйте файл и убедитесь, что он сохранен с использованием конца строки UNIX.

0
ответ дан 8 November 2013 в 22:27

Ошибка:

$'\r': команда, не найденная

средства, что Ваш файл (.bashrc) так или иначе состойте, окончания строки Windows (CRLF) и удар не распознают их, таким образом, он перестал работать. Возможно, Вы отредактировали тот файл в Windows?

Таким образом, необходимо преобразовать затронутый файл назад для использования окончаний строки стиля Unix от CRLF в LF.

Это может быть достигнуто: dos2unix команда, например.

dos2unix ~/.bashrc

Если у Вас нет его, установите через apt-get install tofrodos.

Иначе, если Вам установили Vim, попробуйте:

ex +'%!tr -d "\r"' -scwq ~/.bashrc

для нескольких файлов:

ex +'bufdo!%!tr -d \r' -scxa ~/.bash*

Примечание: :bufdo командой не является POSIX.


Если Вы используете Vagrantfile случайно, и это происходит как часть сценария настройки, можно установить 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
1
ответ дан 8 November 2013 в 22:27

Другие вопросы по тегам:

Похожие вопросы: