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


0

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 aber nicht als "any" erkannt which Befehl.

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


2
In den meisten Muscheln können Sie einfach tippen gcc und drücken Sie zweimal die Tabulatortaste, um die automatische Vervollständigung durchzuführen. Funktioniert das für Sie oder wie ist Ihre Situation? Das heißt, warum brauchen Sie das?
slhck

1
In UNIX und Linux * ist erweitert Vor Das Programm wird ausgeführt. Das bedeutet, dass die Interpretation nicht vom Programm abhängt. In diesem Fall, gcc* wird im aktuellen Verzeichnis erweitert. Deshalb funktioniert es nicht.
MSalters

Im OSX-Standard ist gcc auf der Basis von llvm platziert /usr/bin/gcc. und mit brew installiertes gcc wird platziert /usr/local/bin/gcc-4.x. Ich wollte wissen, dass es andere gibt gcc-* Programme. Natürlich kann ich verwenden find, aber es dauert einige Zeit.
ironsand

Danke MSalters! Mir war dieser Punkt nicht klar. Ich dachte, es hängt von Programmen ab.
ironsand

1
Wenn Sie nur nach den in Ihrem $ PATH suchen, ist es am einfachsten, zweimal auf die Registerkarte zu klicken, wie von @slhck vorgeschlagen.
terdon

Antworten:


4

Da ist ein BASH eingebauter Befehl compgen die verwendet werden kann, um alle aufzulisten Befehle . Funktionen . Aliase und eingebaute .

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

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 z. whichglob und mache 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 die gesamte Funktionalität which ( -a(Exit-Status, mehrere Dateieinstellungen) können in diesem Shell-Skript-Kontext problemlos hinzugefügt werden, aber ich lasse das dem Leser als Übung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.