Você usou "${CMD}"
dentro de aspas duplas, portanto, o resultado da expansão $CMD
não foi executado divisão de campo (e também expansão de nome de arquivo ), a string inteira /usr/bin/find /etc -type f -exec /usr/bin/md5sum {} \;
é considerado como o comando a ser executado. Não existe um comando com esse nome, então o shell reportou o erro No such file or directory .
Como você usa bash
, é melhor usar uma matriz:
$ CMD=( /usr/bin/find /etc -type f -exec /usr/bin/md5sum {} \; )
$ "${CMD[@]}"
ou POSIXly, use "$@"
:
$ set -- /usr/bin/find /etc -type f -exec /usr/bin/md5sum {} \;
$ "$@"
No seu primeiro caso, você pode usar $CMD
sem aspas duplas, mas é não recomendado e falha facilmente . Pelo menos você precisa de set -f
antes de executar $CMD
.