2013-08-01 5 views
9

Szukałem sposobu na wyliczenie wszystkich kopii pliku wykonywalnego, które są zasłonięte przez pierwszą w moim PATH. Najlepsze co mogłem wymyślić jest funkcją:Jak mogę znaleźć wszystkie kopie nazwy pliku wykonywalnego w mojej zmiennej PATH?

find_all_exec() { 
    for i in ${PATH//:/ }; do 
     find "$i/$1" 2> /dev/null 
    done 
} 

$ find_all_exec python 
/usr/local/bin/python 
/usr/bin/python 

To dostaje mi co chcę (choć nie obsługuje aliasów/bash funkcje type robi). Byłem ciekawy, czy jest bardziej zbudowany?

Odpowiedz

17

Spróbuj wbudowane polecenie:

which -a python 
+0

Dzięki. Dokładnie to, czego szukałem. Chyba powinienem RTFM nieco więcej. – weaver

+1

co to jest za obudowę? Nie bash w wersji 4.2.45 (1) -release: 'type który' ->' który jest/usr/bin/which'. Dla bash: 'type -a python' –

+0

good point @glennjackman faktycznie' which' nie jest wbudowanym poleceniem, ale jak wiesz, zwykle jest dostarczane wraz z bash. W każdym razie, 'type -a' dostarcza mi innego wyjścia, niż się spodziewam, pokazując mi tylko występowanie pliku wykonywalnego istniejącego w różnych ścieżkach. Wiesz dlaczego? –

1

myślę, że to powinno działać:

IFS=: 
for dir in $PATH; do 
    if [ -x "$dir/$1" ] 
    then echo "$dir/$1" 
    fi 
done 
Powiązane problemy