Como inserir tabulações antes das linhas de saída de um comando executado

13

Apenas uma pergunta rápida. É possível tabular a saída no Ubuntu 16.04 LTS? Eu criei duas imagens abaixo para tentar ilustrar o que quero dizer com isso.

    
por Alex Ng 17.07.2016 / 16:36

3 respostas

13

Você poderia fazer algo assim com os descritores de arquivos:

  1. salve o descritor de saída atual para que possamos restaurá-lo mais tarde

    exec 3>&1
    
  2. redireciona o fluxo de saída para uma substituição de processo que insere a guia - por exemplo

    exec 1> >(paste /dev/null -)
    

A partir desse ponto, qualquer processo que grava na saída padrão terá essa saída "filtrada" por meio do comando paste para inserir guias no início.

  1. Quando estiver pronto, você poderá retomar o comportamento normal restaurando o descritor de arquivo salvo e fechando o descritor temporário

    exec 1>&3 3>&-
    
por steeldriver 17.07.2016 / 18:19
7

Eu entendo que essa resposta não é ideal para você, mas você poderia fazer uma função Bash com o nome simples _ (ou qualquer outra coisa que ainda não tenha sido usada) que executa o comando como argumentos e recua em todos os seus saída com uma aba.

Um exemplo:

$ _ lsb_release -a
        No LSB modules are available.
        Distributor ID: Ubuntu
        Description:    Ubuntu 16.04 LTS
        Release:    16.04
        Codename:   xenial

O código desta função seria apenas isto:

_(){ sed "s/^/\t/" <($*); }

Você pode anexá-lo ao seu arquivo ~/.bashrc para que ele esteja disponível em todas as sessões de Bash do seu usuário executando:

echo '_(){ sed "s/^/\t/" <($*); }' >> ~/.bashrc

Se você quiser disponibilizá-lo para todos os usuários, anexe-o a /etc/bash.bashrc (requer direitos de administrador):

echo '_(){ sed "s/^/\t/" <($*); }' | sudo tee -a /etc/bash.bashrc

Como alternativa, você também pode criar um arquivo de script como /usr/local/bin/_ com o conteúdo a seguir para obter o mesmo sem as funções de Bash e para todos os usuários:

#!/bin/bash
sed "s/^/\t/" <($*)

Você deve tornar o script executável depois de salvar o arquivo usando

sudo chmod +x /usr/local/bin/_
    
por Byte Commander 17.07.2016 / 17:00
5

Com echo especificamente, você pode fazer com que ele interprete escapes de barra invertida como \t (uma tabulação ) com a opção -e :

echo -e "\tHello World"

Mas dificilmente seria viável (ou provavelmente possível) modificar a saída de todos os comandos dessa maneira. Se a facilidade de leitura for o seu objetivo, você pode querer personalizar a aparência (por exemplo, a coloração) do prompt de comando, como mostrado aqui:

Você pode personalizar seu prompt alterando o conteúdo da variável de ambiente PS1 . Você pode ver um pequeno exemplo de como fazer isso na postagem no blog da captura de tela acima. . Como usar as chamadas seqüências de escape ANSI em detalhes, como usar ferramentas que são mais confortáveis, como ter as mudanças aplicadas por padrão em novos terminais, etc. estão além do escopo desta resposta. Mas se você decidir usar essa técnica, há muitos tutoriais e informações adicionais na Web.

    
por Henning Kockerbeck 17.07.2016 / 17:07