Fundindo diretórios iniciais quebras Readline / .bashrc [duplicado]

1

Nos últimos dias, eu mesclei um diretório home de uma instalação funcional do 12.04 para um diretório home antigo, acredito que a partir de uma instalação do 10.04 (era um driver nulo)

Eu tenho a nova unidade para carregar e montar corretamente, mas quando tento usar as entradas .bashrc da instalação 12.04, coisas como o seguinte alias:

alias banana='echo banana'

Produz os seguintes erros:

-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

Não consigo encontrar o texto que está sendo referenciado nesse arquivo .bashrc (ele só funciona quando eu copio de / etc / skel e, mesmo assim, depois de adicionar o alias e o sourcing, removendo o alias e o sourcing , ainda produz os erros.A única maneira de fazer o Bash funcionar novamente é copiar novamente o arquivo de / etc / skel

Parece que não consigo fazer alterações no .bashrc sem causar esses erros. Eu suspeito que tenha algo a ver com readline ou .inputrc, que também estavam tendo problemas (embora estes pareçam estar resolvidos agora). A partir de agora, não há .inputrc no diretório / home / user.

Obrigado por qualquer ajuda que você possa dar!

    
por SkyCaptain 08.11.2013 / 19:27

3 respostas

1

Tente isto:

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

Isso removerá as terminações de linha no estilo do Windows (caracteres CR - \r ). Agora, se você source ~/.bashrc você não deve receber nenhum erro.

Em seguida, antes de copiar qualquer conteúdo de outro arquivo, execute o mesmo comando para esse arquivo:

sed -i -e 's/\r$//' /path/to/file_from_where_you_copy
    
por Radu Rădeanu 08.11.2013 / 20:16
1

O erro:

  

$'\r' : comando não encontrado

significa que seu arquivo ( .bashrc ) de alguma forma consiste em terminações de linha do Windows (CRLF) e o bash não reconhece eles, então está falhando. Talvez você tenha editado esse arquivo no Windows?

Então você tem que converter seu arquivo afetado de volta para usar finais de linha no estilo Unix do CRLF para LF.

Isso pode ser obtido por: dos2unix command, por exemplo

dos2unix ~/.bashrc

Se você não tiver, instale via apt-get install tofrodos .

Caso contrário, se você tiver instalado o Vim, tente:

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

para vários arquivos:

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

Observação: o comando :bufdo não é POSIX .

Se você está usando Vagrantfile por acaso e isso acontece como parte do script de provisionamento, você pode definir binary para true do seu shell, por exemplo

# 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
    
por kenorb 08.03.2016 / 15:32
0

O arquivo parece bastante confuso. Você pode querer apenas remover o arquivo e copiar um novo arquivo de /etc/skel :

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

Em seguida, edite o arquivo e verifique se ele está salvo usando a terminação da linha do UNIX.

    
por Braiam 08.11.2013 / 19:55