Alternar script bash entre comandos de execução e comandos de impressão

3

Encontrei um script que usava esse "truque" para conseguir alternar entre os comandos em execução e de impressão:

echo_prefix="echo"
rm_cmd="rm file1 file2"
$echo_prefix $rm_cmd

Isso permite ao usuário secar a execução do script e, em seguida, definir echo_prefix="" para efetivamente executar o script.

Ainda assim, encontrei muitos problemas relacionados a globbing e cotação, então estava procurando uma abordagem diferente e mais robusta.

    
por Click 12.01.2018 / 13:53

1 resposta

1

A melhor abordagem para isso é usar | bash .

Então, basicamente, você apenas ecoa seu comando. Aqui no meu exemplo rm file1 file2 e, em seguida, | bash executará a saída.

[ws] user ~ >echo "rm file1 file2"
rm file1 file2
[ws] user ~ >echo "rm file1 file2" | bash
rm: cannot remove ‘file1’: No such file or directory
rm: cannot remove ‘file2’: No such file or directory

@ Kusalananda, Se você tem espaço no nome do arquivo, você só precisa adaptar a primeira parte para manter as aspas no comando echo:

echo "rm \"file with space\"" | bash
    
por 12.01.2018 / 14:06