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
dá 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 .