Edita a árvore para saída no formato personalizado?

3

Gostaria de obter uma saída personalizada do comando tree , mas, ao contrário da pergunta , Eu não tenho um formato fixo. Eu gostaria de poder dar o comando do formato em um argumento (por exemplo, talvez -f=y , -f=yaml , -f=xml , -f=~/myformat.fmt ).

Obviamente, este é um grande empreendimento, mas eu sinto que seria uma boa maneira de explorar como alguns dos comandos Linux funcionam, além de estender minhas habilidades de programação.

Onde devo começar se eu quiser editar (e presumo compilar etc) comandos nativos do Linux? Eles estão assados?

    
por Pureferret 26.01.2014 / 13:23

2 respostas

1

No Debian, Ubuntu, Mint e outras distribuições usando o Dpkg e o APT para manipular pacotes:

  • dpkg -S /path/to/file procura o pacote instalado que contém o arquivo especificado, por exemplo,

    dpkg -S /usr/bin/tree
    dpkg -S $(which tree)
    
  • apt-file search /path/to/file procura o pacote na distribuição que contém o arquivo especificado, por exemplo,

    apt-file search /usr/bin/tree
    
  • Alguns comandos são embutido , ou seja, cozido em seu shell. Seu código-fonte é parte do shell. Use type para descobrir se um comando está embutido.

    $ type cd
    cd is a shell builtin
    $ type tree
    tree is /usr/bin/tree
    

O comando tree está no pacote chamado tree . Você pode baixar e descompactar o código fonte deste pacote com

apt-get source tree
dpkg-source -x tree_*.dsc

Nesse caso, modificar o código-fonte não é a maneira mais fácil. Pode ser um exercício que valha a pena se você quiser fazer alguma programação em C. Para atingir o objetivo, usar uma linguagem de nível superior, como Perl, Python ou Ruby, será menos trabalhosa.

    
por 27.01.2014 / 00:37
2

Não, os comandos do Linux não estão 'integrados'. Um grande número faz parte do GNU coreutils, mas cada um deles ainda é um programa separado dentro desse pacote e pode ser compilado sozinho.

Claro que o comando tree não tem nada a ver com o GNU, sua página do projeto pode ser encontrada aqui - link . O código-fonte está disponível para download e contém instruções de criação (suponho que você já esteja familiarizado com make e gcc ). Um pacote fonte também estará disponível para sua distro e pode incluir adições / correções não disponíveis na versão original (mas também pode ser uma versão mais antiga). Sua distro terá instruções sobre como compilar isso. Na maioria dos casos, se você quiser codificar em um pacote, o código fonte do upstream será o melhor para usar.

Olhando o changelog para tree , vejo que a saída XML foi adicionada na versão 1.6.0 ( -X option) e o HTML sempre esteve disponível. Existem muitos programas já disponíveis para conversão entre as várias linguagens de marcação. xml2yaml é específico e lhe daria yaml . Também pandoc é o mais abrangente que conheço e tem suporte para formatos personalizados (embora a criação de um seja uma tarefa de programação em si).

Se você ainda quiser ir em frente e tentar desenvolver esses recursos diretamente para tree , recomendamos entrar em contato com o desenvolvedor e perguntar se eles gostariam de incorporá-los. Se eles estão interessados e você pode fornecer patches que são de alta qualidade, é muito provável que eles eventualmente sejam incorporados ao programa real. Do que já está no programa, é bem provável que ele estaria interessado em adicionar yaml ou json output (por outro lado, ele pode achar que o programa já tem bastante recurso).

No entanto, um formato personalizado me parece mais mal aconselhado, já que parece uma grande tarefa para uma ferramenta tão simples, a menos que haja uma maneira muito simples de implementá-lo. Você pode gostar das bibliotecas de um projeto maior como o pandoc para conversões, mas novamente isso não é aconselhável para uma ferramenta básica.

    
por 26.01.2014 / 15:17