Kann ich den "which" -Befehl für eine teilweise Übereinstimmung verwenden?

352
ironsand

Ich möchte alle Programme mit Namen wie "gcc", "gcc-4.2", "gcc-4.9" und so weiter finden.

Alle Binaries finden, mit denen ich versucht habe which -a gcc*.

"*" Wird jedoch nicht als "any" mit dem whichBefehl erkannt .

Gibt es eine Möglichkeit, alle Programme in der PATH-Umgebungsvariablen anhand einer Musterübereinstimmung zu finden?

0
In den meisten Shells können Sie einfach "gcc" eingeben und zweimal die Tabulatortaste drücken, um die automatische Vervollständigung zu erreichen. Funktioniert das für Sie oder wie ist Ihre Situation? Das heißt, warum brauchen Sie das? slhck vor 10 Jahren 2
In UNIX und Linux wird '*' erweitert _, ​​bevor das Programm ausgeführt wird. Das bedeutet, dass die Interpretation nicht vom Programm abhängt. In diesem Fall wird `gcc *` im aktuellen Verzeichnis erweitert. Deshalb funktioniert es nicht. MSalters vor 10 Jahren 1
In der OSX-Standardeinstellung ist gcc llvm-basiert, die `/ usr / bin / gcc` platziert wird. und mit `brew` installiert wird gcc` / usr / local / bin / gcc-4.x` platziert. Ich wollte wissen, dass es noch andere gcc- * -Programme gibt. Natürlich kann ich 'find' verwenden, aber es dauert einige Zeit. ironsand vor 10 Jahren 0
Danke MSalters! Mir war dieser Punkt nicht klar. Ich dachte, es hängt von Programmen ab. ironsand vor 10 Jahren 0
Wenn Sie nur nach den in Ihrem $ PATH suchen, ist es am einfachsten, zweimal auf die Registerkarte zu klicken, wie von @slhck vorgeschlagen. terdon vor 10 Jahren 1
Danke, Terdon. Ich habe falsch gelesen, was er geschrieben hat. Ich habe nur einmal getroffen. ironsand vor 10 Jahren 0

2 Antworten auf die Frage

4
justbrowsing

Es gibt einen BASHintegrierten Befehl, mit compgendem alle Befehle, Funktionen, Aliasnamen und integrierten Funktionen aufgelistet werden können .

compgen -abck | grep "gcc" 

Parameter: help compgen

compgen: [-abcdefgjksuv]  [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] 
2
Daniel Andersson

Hier ist ein schnelles und schmutziges Beispielskript, um das zu tun, was Sie in der Praxis wollen:

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

Speichern Sie dies als zB whichglobund machen Sie es ausführbar. Probelauf:

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

Eigentlich kann die gesamte Funktionalität in which( -aExit-Status, Eingaben für mehrere Dateien) auch in diesem Shell-Skript-Kontext hinzugefügt werden, aber ich lasse das dem Leser als Übung.