Globbing basierend auf dem aktuellen Verzeichnis

Globbing basierend auf dem aktuellen Verzeichnis

Bin heute auf ein seltsames Verhalten gestoßen. Ich frage mich, ob mir hier jemand sagen kann, was sich anders verhält. Die Umgebung ist ein RHEL 6.7-Server.

Ich führe den folgenden Befehl aus:

yum list installed *mysql*

Wenn mein cwd / oder eine Reihe anderer Stellen ist, erhalte ich die folgende Ausgabe:

Installed Packages MySQL-client-advanced.x86_64 5.6.27-1.el6 @/MySQL-client-advanced-5.6.27-1.el6.x86_64 MySQL-server-advanced.x86_64 5.6.27-1.el6 @/MySQL-server-advanced-5.6.27-1.el6.x86_64 MySQL-shared-advanced.x86_64 5.6.27-1.el6 @/MySQL-shared-advanced-5.6.27-1.el6.x86_64 MySQL-shared-compat-advanced.x86_64 5.6.27-1.el6 @/MySQL-shared-compat-advanced-5.6.27-1.el6.x86_64

In einigen anderen Ordnern (einschließlich /opt auf diesem Server) führe ich denselben Befehl aus und erhalte diese Ausgabe:

Error: No matching Packages to list

Jetzt weiß ich, dass ich in diesem Befehl normalerweise das Platzhalterzeichen maskieren muss. Wenn ich es wie folgt ausführe:

yum list installed \*mysql\*

dann bekomme ich an beiden Orten die richtige Ausgabe. Ich nehme an, das liegt daran, wie Bash Platzhalter globt. Was ich jetzt wirklich wissen möchte, ist, warum es sie in einem Ordner globt, aber nicht in dem anderen. Ich führe beide als Root aus, printenv zeigt identische Ausgabe (außer PWD), buchstäblich das einzige, was sich zwischen der Ausführung des Befehls und beiden Malen ändert, istcd /opt

Kann mir jemand sagen, warum das passiert oder worauf ich achten muss, um herauszufinden, warum es anders sein könnte? TIA

Antwort1

Dies liegt daran, dass das Ergebnis des *mysql*Globbings vom Inhalt des Verzeichnisses abhängt, in dem Sie sich befinden. Ihre Shell interpretiert das *-Zeichen (es sei denn, Sie maskieren es oder verbergen es in Anführungszeichen), indem sie versucht, es mit Dateinamen im Verzeichnis abzugleichen.

Zur Veranschaulichung führen Sie (in jedem der betreffenden Verzeichnisse) aus:

echo yum list installed '*mysql*'
echo yum list installed *mysql*
ls -ld *mysql*

verwandte Informationen