O que faz com que o bash pause após um comando incorreto?

23

Quando você está digitando um comando ruim, digamos que você quer fazer:

$ cd ..
$ ls

Mas, em vez disso, você digita rápido demais e acaba digitando entre l es, então você começa:

$ cd ..
$ l
sbash: l: command not found...

Isso acontece o tempo todo, claro, quando digitamos rápido. O que eu estou curioso sobre é a fonte do 2,5 segundo (no meu sistema) pausa após o texto de comando ruim aparece na tela. Parece-me que reconhece o mau comando instantaneamente, imprime mensagem de erro sobre isso, mas apenas por diversão espera 2,5 segundos antes de me voltar para a linha de comando. O que causa isso? Existe uma maneira de corrigir isso? É um pequeno aborrecimento, mas eu gostaria de me livrar disso. :)

Editar: executando o sistema Fedora 16

    
por Fuu 26.02.2012 / 10:32

3 respostas

42

Esse tipo de comportamento é causado por uma ferramenta frequentemente instalada em algumas distribuições que são conectadas ao bash. Este hook faz com que, se você tentar executar um comando, e o comando não exista, o bash procurará os arquivos disponíveis nos repositórios configurados, e lhe dirá qual pacote você precisaria instalar para obter aquele comando. / p>

Se você não está em um sistema Debian, você vai querer olhar seus perfis de arquivos de inicialização e assim por diante e ver se alguma coisa define a função chamada command_not_found_handle . Se essa função bash for definida, ela será chamada sempre que você executar um comando e um programa apropriado não puder ser localizado em seu caminho de pesquisa. Se você executar typset | less e navegar pela saída, verá a função command_not_found_handle() , se tiver sido definida.

No Debian / Ubuntu, o pacote que fornece esse comportamento é command-not-found . Se você limpar isso, desativará as pesquisas que retardam as coisas.

Aqui está um exemplo

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

A hora exata seria, naturalmente, diferente para você. Eu corri meus testes em um servidor muito robusto.

    
por 26.02.2012 / 10:35
6

Parte da questão era "existe uma maneira de corrigir isso (no Fedora)?" Existe: na parte inferior do seu arquivo .bashrc, adicione o comando

unset command_not_found_handle

Você provavelmente quer fazer isso no final de seu .bashrc (ou próximo a ele) porque você pode estar executando o / etc / bashrc ou outros scripts bash no topo de seu .bashrc.

    
por 26.02.2012 / 18:44
5

No fedora, esse comportamento pode ser controlado alterando o arquivo de configuração /etc/PackageKit/CommandNotFound.conf .

A configuração de SoftwareSourceSearch=false eliminará o atraso, já que ele não tentará localizar um pacote com o comando ausente usando o gerenciador de pacotes.

Você também pode alterar a quantidade de tempo que irá aguardar por uma pesquisa de pacotes, alterando a opção MaxSearchTime=2000 para indicar o número de milissegundos que você está disposto a esperar para a pesquisa de pacotes retornar uma correspondência. Eu acho que o padrão de 2 segundos não é longo o suficiente para retornar qualquer correspondência e apenas causa um atraso indesejado quando você tem um erro de digitação.

Adicione o MaxSearchTime para fornecer uma saída útil ou desative SoftwareSourceSearch para eliminar completamente o atraso.

    
por 13.02.2013 / 16:34

Tags