Como inserir guias antes das linhas de saída de um comando executado

16

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

img1

img2

Alex Ng
fonte
11
Tudo bem se você precisar canalizar a saída do comando através de outro comando como YOUR COMMAND | indentou se você precisar digitar outro comando na frente dele (poderia ser apenas um sublinhado) como _ YOUR COMMAND?
Byte Commander
11
@ByteCommander Eu considerei isso, no entanto, estou fazendo isso para facilitar o uso e facilitar a leitura da saída do console. Portanto, não acho que canalizar todos os meus comandos seja a solução. Obrigado pela resposta e edite!
Alex Ng
11
[Por favor, não poste cenas da saída de texto. ] ( meta.askubuntu.com/q/8713/85695 )
terdon 18/07/16

Respostas:

15

Você poderia fazer algo assim - com descritores de arquivo:

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

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

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

A partir deste ponto, qualquer processo que grava na saída padrão terá essa saída 'filtrada' através do pastecomando para inserir guias no início.

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

    exec 1>&3 3>&-
chave de aço
fonte
Eu gostaria de agradecer pela resposta. Este é o mais próximo que eu cheguei de uma solução, mesmo que não seja perfeita.
Alex # Ngt
@AlexNg, obrigado pelo voto positivo - de que maneira especificamente não faz o que você pediu? se você me avisar, tentarei melhorá-lo #
steeldriver
Para dar alguns exemplos: Após inserir seus comandos, alguns comandos funcionam como pretendido, como 'php -v', 'hostname' e outros. No entanto, ao usar um comando como 'eco Hello World', a saída é exibida alinhada com a entrada e também afeta adversamente a aparência visual da entrada ao inserir o próximo comando. Alguns outros comandos também não são afetados pelo processo de tabulação, como ao inserir um comando inválido, como 'asdasd'.
Alex # Ng
Por fim, ele não exibe corretamente a saída que muda (não sabe como descrever isso corretamente, desculpas). Por exemplo, se o comando 'apt-get update' for usado, haverá diferenças visíveis ao compará-lo a um console sem o processo de tabulação.
Alex # Ng
O problema é que essa abordagem lida apenas com STDOUT (fluxo 1), mas não com STDERR (fluxo 2). Ele também interrompe a saída de programas que usam lessou ferramentas semelhantes para permitir a rolagem da saída, como por exemplo man.
Byte Commander
9

Entendo que esta resposta não é ideal para você, mas você pode criar uma função Bash com o nome simples _(ou qualquer outra coisa que ainda não seja usada) que executa o comando que obtém como argumentos e identifica toda a sua saída com uma guia.

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 dessa função seria apenas isso:

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

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

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

Se você deseja disponibilizá-lo para todos os usuários, anexe-o /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 /usr/local/bin/_com o seguinte conteúdo para obter o mesmo sem as funções do Bash e para todos os usuários:

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

Você deve tornar o script executável após salvar o arquivo usando

sudo chmod +x /usr/local/bin/_
Byte Commander
fonte
5

Com echoespecificamente, você pode interpretar escapes de barra invertida como \t(uma parada de tabulação ) com a -eopção:

echo -e "\tHello World"

Mas dificilmente seria possível (ou provavelmente possível) modificar a saída de todos os comandos dessa maneira. Se a facilidade de leitura é o seu objetivo, convém 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 do blog da qual a captura de tela acima é. Como usar as chamadas seqüências de escape ANSI em detalhes, como usar ferramentas mais confortáveis, como aplicar as alterações por padrão em novos terminais etc. estão fora do escopo desta resposta. Mas se você decidir usar essa técnica, existem muitos tutoriais e mais informações na Web.

Henning Kockerbeck
fonte
Obrigado pela resposta, no entanto, eu já mudei o PS1 ao meu gosto.
Alex # Ng