Executar um comando armazenado em uma variável para fazer eco em um arquivo

2

Como posso fazer com que o comando armazenado funcione no seguinte cenário:

CMD='echo "test" >> test.txt'
$CMD

Funcionará para outros cenários como:

CMD='mkdir test'
$CMD
    
por Shayne Manning 08.12.2015 / 19:27

1 resposta

5

A regra correta deve ser:

  • Armazena dados em variáveis, armazena o código em funções.

Assim, a maneira correta de ter esse comando funcionando é: faça uma função:

first_command (){ echo "test" >> test.txt; }

Chame a função:

first_command

É isso.

É errado armazenar um comando como uma string.
É ainda pior usar o eval para executar tais comandos.

Parece funcionar para o comando simples, mas o problema oculto é que a etapa eval remove a citação do comando.

Se você armazenar este comando

CMD='echo "test" >> test.txt'

O eval "$CMD" (sim, até mesmo citado) executará este comando:

echo test >> test.txt

Sem citações !!!.

É muito fácil esquecer que as cotações precisam de gerenciamento especial com eval. E fazer as citações funcionando corretamente sempre é complicado.

Tentar executar um comando armazenado em uma variável que não tenha redirecionamentos (o principal problema que exige o uso de eval) sem o passo eval ainda é complicado e não funciona em todos os casos.

Por favor, leia uma excelente introdução para o problema aqui: Estou tentando colocar um comando em uma variável, mas o casos complexos sempre falham!

    
por 08.12.2015 / 21:05