Como ativar a nova linha seperate quando executar o comando 'ls -l' quando a stdout não for um terminal

0

Eu armazeno o comando em uma variável cmd , e obtenho a saída do comando usando esta declaração:

echo '$cmd'

tudo funciona bem, exceto ls -l , a nova linha está faltando.

    
por Divlaker 03.06.2017 / 03:03

1 resposta

1

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.

    
por 04.06.2017 / 01:55