Executa um arquivo se um comando não for encontrado

1

Quando tento executar arquivos no Linux, fico sempre incomodado com a necessidade de escrever ./executablefile em vez de apenas executablefile . Eu entendo porque isso é feito, por isso não terá uma entrada ambígua, uma que seja um comando e também um arquivo.

Mas eu quero que ele execute o arquivo se um comando não for encontrado (os comandos têm prioridade). Fiz um tweak através de um guia que se você escreve um comando e ele não é encontrado, ele o procura no banco de dados pacman e me diz em qual pacote o comando está, então eu sei que é possível fazer algo quando ele diz% código%.

Existe uma boa maneira de fazer isso?

    
por shoham 03.09.2014 / 13:08

3 respostas

3

O método mais fácil (mas geralmente contra-indicado) é simplesmente acrescentar ./ à sua variável de ambiente PATH no final do seu script de inicialização do shell, assim (variantes bash / sh):

export PATH=$PATH:./

Isso resultará no shell tentando todos os diretórios usuais antes de procurar no diretório local pelo comando.

Nota: use a seu próprio risco e absolutamente não faça isso como root.

    
por 03.09.2014 / 13:24
2

Estou usando command-not-found version: 0.2.44 . Existe uma função chamada command_not_found_handle() que é executada se um comando não for encontrado e serve uma lista de comandos que são similares.

Escreva a função da seguinte forma (apenas copie e cole no seu terminal, não é permanente):

command_not_found_handle ()
{
    if [ -x $1 ]; then
        echo "executing ./$1"
        ./$1
        return $?;
    fi
    if [ -x /usr/lib/command-not-found ]; then
        /usr/bin/python /usr/lib/command-not-found -- "$1";
        return $?;
    else
        if [ -x /usr/share/command-not-found/command-not-found ]; then
            /usr/bin/python /usr/share/command-not-found/command-not-found -- "$1";
            return $?;
        else
            printf "%s: command not found\n" "$1" 1>&2;
            return 127;
        fi;
    fi
}

Eu editei as primeiras linhas. Quando você digita, por exemplo, foobar agora e o comando não é encontrado, ele procura na pasta atual se houver um arquivo chamado foobar e se esse arquivo for executável ( -x ), ele será executado ( %código%). Você pode remover a linha ./$1 , se quiser.

Para torná-lo permanente :

Essa função é normalmente definida no arquivo echo . Você pode acrescentar a função no arquivo /etc/bash.bashrc . Isso substituirá as partes em ~/.bashrc .

    
por 03.09.2014 / 13:23
1

Coloque seu arquivo em / usr / bin e então você pode executá-lo apenas digitando o nome. Também a conclusão de tabulação funciona lá

    
por 03.09.2014 / 15:19