chamando um comando do script e mantendo o estilo

4

Estou chamando um comando de um script em execução no Linux. Nesse caso, ls para listar o conteúdo do diretório.

Quando eu chamo ls do script, faço um simples loop while para ler a saída linha a linha.

Eu então imprimo a linha usando echo e aspas duplas, por exemplo %código%. Ele ecoa cada linha, mas perde todo o estilo (cores).

Como eu manteria o estilo enquanto ainda seria capaz de processar as linhas?

    
por TheHidden 03.06.2017 / 17:57

1 resposta

8

Existem dois problemas aqui. Primeiro de tudo, o que você está fazendo é absolutamente o caminho errado para processar os arquivos em um diretório e vai quebrar se seus nomes de arquivo contiverem novas linhas ou outra estranheza. Consulte o link para saber mais.

Dito isto, as cores de ls são opcionais. Em muitas distribuições do Linux, o comando ls é na verdade com alias para ls --color=tty , o que habilita cores quando ls está imprimindo para um tty (em oposição a um while loop, por exemplo). No entanto, os aliases não estão habilitados em scripts normalmente, portanto, quando você executar ls do seu script, estará executando o% normalls sem cores.

Então, a primeira solução seria chamar ls --color=always . Isso vai deixar você ecoar com cores. No entanto, isso é quase certamente uma má idéia, como mencionei no primeiro parágrafo. Por um lado, se você quiser apenas imprimir cada linha, por que você simplesmente não executa ls e esquece o laço while ?

Se você precisar processar os arquivos por algum outro motivo e ainda precisar usar ls , use globbing para obter a lista de arquivos e, em seguida, execute ls em cada um deles manualmente:

for file in *; do
    ls -d --color=always -- "$file"
done

Isso não interromperá nomes de arquivos estranhos e ainda mostrará as cores conforme solicitado.

    
por 03.06.2017 / 20:18

Tags