Posso usar o comando 'which' para correspondência parcial?

0

Eu quero encontrar todos os programas com nomes como "gcc", "gcc-4.2", "gcc-4.9" e assim por diante.

Para encontrar todos os binários que eu tentei com which -a gcc* .

Mas "*" não é reconhecido como 'any' com o comando which .

Existe uma maneira de encontrar todos os programas na variável de ambiente PATH por correspondência de padrões?

    
por ironsand 31.08.2013 / 08:45

2 respostas

4

Há um comando interno BASH compgen que pode ser usado para listar todos os comandos , funções , aliases e built-ins .

compgen -abck | grep "gcc"

Parâmetros: help compgen

compgen:
[-abcdefgjksuv] 
[-o option]
[-A action]
[-G globpat]
[-W wordlist]
[-F function]
[-C command]
[-X filterpat]
[-P prefix]
[-S suffix]
[word]
    
por 31.08.2013 / 10:22
2

Aqui está um script de exemplo rápido e sujo para fazer o que você quer na prática:

#!/bin/sh
IFS=:
for i in $PATH; do
    for j in "$i"/$1; do
        [ -f "$j" ] && [ -x "$j" ] && printf '%s\n' "$j"
    done
done

Salvar como, por exemplo, whichglob e torná-lo executável. Exemplo de execução:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin
$ ./whichglob grep*
/usr/bin/grepdiff
/usr/bin/grep-excuses
/usr/bin/grepjar
/bin/grep

Na verdade, todas as funcionalidades em which ( -a , status de saída, várias entradas de correspondência de arquivo) podem ser facilmente adicionadas também neste contexto de script de shell, mas deixo isso como um exercício para o leitor.

    
por 31.08.2013 / 10:03