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
.