Obter Unix para me dizer o "x similar"

2

Muitas vezes, se estou fazendo algo no terminal, vou digitar algo errado e inserir algo não intencional.

Se eu digitar int como um exemplo trivial, ele me diz Command 'int' not found, but there are 18 similar ones.

Não que eu precise conhecer esses 18 comandos similares, mas existe alguma maneira de descobrir quais são esses "18 similares"? Seja no terminal ou de outra forma.

    
por Theodore Weld 12.10.2018 / 07:00

1 resposta

0

Se isso acontecer no Ubuntu, askubuntu.com está dizendo que O bash usa /usr/lib/command-not-found , que usa o módulo CommandNotFound do Python.

Você pode ver em /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py as linhas exatas que são responsáveis por "mas existem X similares", elas começam na linha 178 no arquivo CommandNotFound.py:

if len(mispell_packages)+len(mispell_snaps) > max_alt:
    print("", file=self.output_fd)
    print(_("Command '%s' not found, but there are %s similar ones.") % (word, len(mispell_packages)), file=self.output_fd)
    print("", file=self.output_fd)
    self.output_fd.flush()
    return

Como não há switch, flag ou qualquer opção para fazer CommandNotFound.py retornar também uma lista desses comandos similares, se você realmente quer saber quais são esses pacotes, você poderia simplesmente editar esta parte do arquivo python e adicionar duas linhas que imprimirá o conteúdo da matriz com comandos semelhantes, em vez de apenas um número de itens nessa matriz. As linhas adicionadas são as linhas 4 e 5 nesta parte do código:

if len(mispell_packages)+len(mispell_snaps) > max_alt:
    print("", file=self.output_fd)
    print(_("Command '%s' not found, but there are %s similar ones.") % (word, len(mispell_packages)), file=self.output_fd)
    for x in range(len(mispell_packaged)):
        print(mispell_packages[x])
    print("", file=self.output_fd)
    self.output_fd.flush()
    return

Agora, quando você salvar /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py (você precisa editá-lo como raiz) e digitar int , você terá:

Command 'int' not found, but there are 18 similar ones.
('itd, 'ncl-ncarg', 'universe', '')
('ant, 'ant', 'universe', '')
('inl, 'ioport', 'universe', '')
('inw, 'ioport', 'universe', '')
('tint, 'tint', 'universe', '')
('inc, 'mailutils-mh', 'universe', '')
('inc, 'mmh', 'universe', '')
('inc, 'nmh', 'universe', '')
('nit, 'python-nevow', 'universe', '')
('init, 'systemd-sysv', 'main', '')
('itv, 'python-invoke', 'universe', '')
('itv, 'python3-invoke', 'universe', '')
('cnt, 'open-infrastructure-container-tools', 'universe', '')
('inb, 'ioport', 'universe', '')
('ent, 'ent', 'universe', '')
('ink, 'ink', 'universe', '')
('iyt, 'python3-yt', 'universe', '')
('iat, 'iat', 'universe', '')

A lista contém nomes de comandos semelhantes (itd e, inl, inw, tint) e os pacotes que fornecem esses comandos (ncl-ncarg, ant, ioport) e o repo de onde vem ( universe, main ).

Espero que você tenha satisfeito sua curiosidade :) Para ser sincera, fiquei curiosa também depois de ler o seu post.

    
por 12.10.2018 / 13:50