Os erros estão aqui:
=: cannot open '=' (No such file or directory)
Algo está tentando abrir um arquivo chamado =
, mas não existe.
/tmp/script.sh: line 9: : No such file or directory
Isso geralmente teria o nome do arquivo antes dos últimos dois pontos, mas como está vazio, parece que algo está tentando abrir um arquivo com um nome vazio.
Considere a linha:
file = "/tmp/countries.properties"
Isso executa o comando file
com os argumentos =
e /tmp/countries.properties
. (O shell não importa quais são os argumentos para um comando, pode haver algo que use o sinal de igual como argumento.) Agora, file
simplesmente acontece de ser um programa usado para identificar os tipos de arquivos , e faz exatamente isso. Primeiro, tente abrir =
, resultando em um erro e, em seguida, abrindo /tmp/countries.properties
, informando o que é:
/tmp/countries.properties: ASCII text
O outro No such file or directory
vem do redirecionamento < $file
. Como a variável não recebe um valor, o redirecionamento não funcionará.
Uma atribuição no shell requer que não haja nenhum espaço em branco ao redor do sinal =
, portanto:
file=/tmp/countries.properties
Além disso, aqui:
sed -ie 's/:iso=>"${key}"/:iso=>"${key}",:alpha_iso=>"${value}"/g'
As variáveis não são expandidas entre aspas simples, e você tem aquelas ao redor de todo o segundo argumento, então sed
obterá literal ${key}
e não o conteúdo da variável.
Encerre as aspas simples para expandir as variáveis ou apenas use aspas duplas para toda a string:
sed -ie 's/:iso=>"'${key}'"/:iso=>"'${key}'",:alpha_iso=>"'${value}'"/g'
sed -ie "s/:iso=>\"${key}\"/:iso=>\"${key}\",:alpha_iso=>\"${value}\"/g"