Was bedeutet !# (Ausrufezeichen Hash), !$:r:r (Ausrufezeichen Dollar Doppelpunkt r), !#:t (Ausrufezeichen Hash Doppelpunkt t) in den folgenden Bash-Befehlen?

Was bedeutet !# (Ausrufezeichen Hash), !$:r:r (Ausrufezeichen Dollar Doppelpunkt r), !#:t (Ausrufezeichen Hash Doppelpunkt t) in den folgenden Bash-Befehlen?

Ich habe versucht, ein Nagios-Paket zu installieren und bin auf diese seltsamen Bash-Erweiterungen in einem Leitfaden gestoßenHier. Kann mir jemand helfen zu verstehen, was die Erweiterungen bedeuten? Ein Wiki-Link wäre für zukünftige Referenzen ebenfalls hilfreich.

root@z:~> wget http://mathias-kettner.de/download/check_mk-1.1.7i5.tar.gz
root@z:~> tar zxvf !#:t
root@z:~> chown -R root:root !$:r:r && chmod -R o-w !$:r:r && cd !$:r:r
root@z:~/check_mk-1.1.7i5> ./setup.sh

Antwort1

Diese sindbashSchlüsselwörter für Verlaufserweiterungen. Sie wählen eine Zeile aus dem Shell-Verlauf aus und fügen (Teile davon) erneut ein, möglicherweise nach einer Änderung. Die Site, auf die Sie verlinkt haben, erklärt sie ganz gut, aber sie beschreibt nicht alle.

tar zxvf !#:t

macht eigentlich keinen Sinn: !#wählt die bisher eingegebene Zeile aus, aber das ist tar zxvfund wir wollen nichts davon wiederverwenden. Es sollte sein

tar zxvf !$:t

Dadurch wird der letzte Teil der vorherigen Zeile ( !$) ausgewählt, also die an übergebene URL wget, und der Dateinamenteil ( :t, für „tail“ – streng genommen ist dies alles, was nach dem letzten Verzeichnistrennzeichen, , übrig bleibt /, was bei URLs zufällig gut funktioniert) übernommen.

Dann

chown -R root:root !$:r:r

wählt den letzten Teil der vorherigen Zeile aus, löscht die Dateierweiterung ( :r— genau genommen entfernt es alles, was nach dem letzten steht ., einschließlich des .) zweimal, was den Verzeichnisnamen ergibt (vorausgesetzt, das Tarball enthält ein Verzeichnis mit demselben Namen wie der Basisname des Tarballs). Die Befehle chmodund cdgehen auf die gleiche Weise vor.

verwandte Informationen