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

Этот вопрос уже имеет ответ здесь: Ошибка терминала (где-то где-то?) с .bashrc отключает все псевдонимы и т. д. 1 ответ

За последние несколько дней я объединил домашний каталог с рабочей установкой из 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 или .inputr c, которые также имеют проблемы (хотя они, похоже, теперь решены). На данный момент в каталоге / home / user нет .inputrc.

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

1
задан 9 November 2013 в 00:27

2 ответа

Ошибка:

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

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

Итак, вы должны преобразовать ваш поврежденный файл, чтобы использовать окончание строк в стиле Unix из CRLF в LF.

Этого можно достичь: dos2unix, например

dos2unix ~/.bashrc

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

В противном случае, если вы установили Vim, попробуйте: [!d8 ]

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

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

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

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

Если вы используя Vagrantfile, и это происходит как часть сценария инициализации, вы можете установить окончания строки на 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
ответ дан 24 May 2018 в 15:30

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

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

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

0
ответ дан 24 May 2018 в 15:30
  • 1
    Хорошо, это, кажется, решает проблему, если я: Скопируйте файл из / etc / skel. Редактируйте файл с помощью Vim Save, Source. Однако я пытаюсь скопировать псевдонимы из другого файла, открытого на локальном компьютере (в gVim) затем вставляется в удаленный файл (также в gVim). Добавление, удаление этих строк приводит к ошибке повторной ошибки. Я думаю, что у меня такая же проблема при редактировании этого файла / вырезания и вставки с помощью Gedit. – SkyCaptain 9 November 2013 в 01:02

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

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