bash / cygwin quebrado depois de instalar o rtool?

4

Normalmente, posso resolver problemas por conta própria (e pelo Google). Mas recentemente estou perplexo com este estranho soluço.

Antecedentes: Eu uso uma cadeia de scripts para processamento de arquivos (no Windows, sob o Cygwin. Os scripts também são executados no OS X com o gnu baseutil). Um dia depois de instalar o Rtools , meus scripts pararam de funcionar. Depois de muito trabalho, consegui identificar um problema.

Problema: Eu tenho a seguinte linha:

key=$( echo "$foo" | tr -d - | tr '[:upper:]' '[:lower:]' )

em que $foo é apenas outra variável de texto. Eu removo traços em $foo e os converto em minúscula. O roteiro funcionou milhares de vezes.

Mas agora isso não acontece. Se eu correr

echo "Blah-Bleh" | tr -d - | tr '[:upper:]' '[:lower:]'

Eu recebo blahbleh , o que é esperado. Mas se eu fizer

a=$(echo "Blah-Bleh" | tr -d - | tr '[:upper:]' '[:lower:]')
echo $a

Eu não recebo nada. $a está vazio e [[-z $ a]] retorna true . No entanto, se eu reverter para backticks da velha escola, o comando funcionará novamente:

a='echo "Blah-Bleh" | tr -d - | tr '[:upper:]' '[:lower:]''
echo $a

blahbleh .

Agora eu posso substituir todas as substituições de comandos pelo estilo antigo, mas isso é mais uma solução alternativa do que uma solução. Então, meus colegas StackExchangers, o que estou perdendo e como faço para corrigir isso? É realmente irritante.

ps. Meu próprio diagnóstico até agora:

  • A desinstalação do Rtools não ajudou;
  • Reiniciar a máquina não ajudou;
  • Reinstalar todos os pacotes do Cygwin não ajudou;
  • bash versão é 4.3.42 (4);
  • No momento, não tenho absolutamente nada em ~/.bashrc , ~/.bash_profile , ~/.profile , /etc/profile e /etc/bash.bashrc . Não tenho certeza sobre antes Rtools;
  • Não consigo ver nada de errado em $PATH .
por Yifeng Mu 27.05.2016 / 22:34

1 resposta

0

OK, depois de muito mexer e puxar o cabelo, consegui restaurar o funcionamento do Cygwin. Foi o que eu fiz:

  1. Rtools removidos
  2. Limpo e% de% PATH do Windows de qualquer entrada relacionada ao Cygwin / Rtools;
  3. Reinstalou todos os pacotes do Cygwin (do cache);
  4. Cygwin rebaseado;
  5. E reiniciei o computador com mais frequência do que o necessário.

De volta ao trabalho ...

PS. Apesar do Cygwin estar trabalhando novamente, descobri que a linha original onde eu atribuo valores a um array bash não está mais produzindo o resultado correto. Tive que mudar isso

read -r -a array <<<$(printf $string)

para isso

array=($(printf $string))

para que funcione. Deve ter sido uma atualização bash, deve ser.

    
por 03.06.2016 / 03:28