2013-08-01 5 views
9

Ich war auf der Suche nach einer Möglichkeit, alle Kopien einer ausführbaren Datei, die von der ersten in meinem PATH beschattet sind, zu nummerieren. Das Beste, was ich tun konnte, ist eine Funktion:Wie kann ich alle Kopien eines ausführbaren Namens in meinem PATH finden?

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 

Das bekommt mir, was ich will (obwohl es behandelt nicht bash Aliase/Funktionen wie type der Fall ist). Ich war neugierig, ob es mehr eingebaut ist?

Antwort

17

Versuchen Sie, diese builtin Befehl:

which -a python 
+0

Dank. Genau das, was ich gesucht habe. Ich denke, ich sollte RTFM ein bisschen mehr. – weaver

+1

In welche Shell ist das eingebaut? Nicht bash version 4.2.45 (1) -release: 'type which' ->' was ist/usr/bin/which'. Für bash: 'type -a python' –

+0

good point @glennjackman eigentlich' which' ist kein eingebauter Befehl, aber wie Sie wissen, wird es normalerweise zusammen mit bash bereitgestellt. Wie auch immer, 'type -a' liefert mir eine andere Ausgabe von dem, was ich erwarte, und zeigt mir nur ein Vorkommen einer ausführbaren Datei, die in den verschiedenen Pfaden existiert. Weißt du, warum? –

1

Ich denke, das sollte funktionieren:

IFS=: 
for dir in $PATH; do 
    if [ -x "$dir/$1" ] 
    then echo "$dir/$1" 
    fi 
done 
Verwandte Themen