Se você armazenou um comando em uma variável de string, então para executá-lo você precisa
eval "$cmd"
A execução de $cmd
só funcionará se o comando não contiver nenhum caractere especial do shell diferente do espaço em branco. Armazenar um comando em uma variável de string é uma má ideia em geral. Seria melhor definir uma função:
cmd () {
ls -l
}
Então você pode executá-lo com apenas cmd
.
Seu problema mais imediato é que você mangle ainda mais a saída do comando, porque você está usando uma substituição de comando sem aspas. Você precisa usar aspas duplas em torno de substituições de variáveis e comandos. Com cmd
definido como uma função:
echo "'cmd'"
Para evitar surpresas com comandos complexos, use parênteses em dólar em vez de backticks:
echo "$(cmd)"
Veja Por que meu script de shell sufocar em espaços em branco ou outros caracteres especiais? para explicações.