Ich stelle hier ein Skript bzw. eine Funktion für die Shell vor, mit dem man sich Informationen über einen auf der Kommandozeile möglichen Befehl (genauer: dessen erstes Wort) beschaffen kann. Ein solches Befehlswort kann alles mögliche sein, z.B, ein Alias, der Name einer Funktion, ein Schlüsselwort der Shell-Sprache, ein über die Umgebungsvariable PATH auffindbare Datei oder ein Dateiname mit Pfadangabe.
Die Funktion _WTF_ beschafft mit Hilfe der Befehle type, whatis, whereis, which und help Informationen für jedes ihrer Argumente und zeigt diese an. Außerdem werden, sofern es Angaben über Alternativen zum Befehl gibt, die relevanten Informationen aus dem Alternativen-System abgefragt.
Man kann diese Funktion in der eigenen Datei ~/.bash_aliases ablegen und hat sie dann nach Start eines Terminals mit einer Shell automatisch verfügbar, beispielsweise:
?? egrep ?? ll ?? until ?? echo ?? chmod
Der letzte Befehl liefert unter Ubuntu 26.04:
chmod ist /usr/bin/chmod chmod ist /bin/chmod chmod (1) - Change the mode of each FILE to MODE. With --reference, change the mode of each FILE to that of RFILE. chmod (2) - change permissions of a file chmod: /usr/bin/chmod /usr/share/man/man2/chmod.2.gz /usr/share/man/man1/chmod.1.gz lrwxrwxrwx 1 root root 32 Mar 30 18:50 /usr/bin/chmod -> ../lib/cargo/bin/coreutils/chmod -rwxr-xr-x 115 root root 11352352 Apr 16 14:41 /usr/lib/cargo/bin/coreutils/chmod
An der Angabe cargo erkennt man, dass auf diesem System chmod nicht mehr als altbekannte GNU-Werkzeug ist, sondern dessen Reinkarnation in Rust, leider verwenden die rust-coreutils nicht das Alternativen-System.
Die Funktion _WTF_:
_WTF_ ()
for X
do case $X in (''|-*) continue ; esac
echo ; type -a "$X"
case $( type -t "$X" )
in (''|alias|function) continue
;; (keyword|builtin) help "$X" ; continue
;; (file) whatis "$X" ; whereis "$X" ; X=$( which "$X" )
esac
! test -z "$X" && ls -l "$X" || continue
( _rep=10
while test -L "$X" && (( --_rep > 0 ))
do cd "${X%/*}" ; X=$( readlink "$X" )
case ${X%/*} in (/etc/alternatives)
update-alternatives --display "${X##*/}"
esac
ls -l $( realpath "$X" )
done
)
done
alias ??='_WTF_ 'Getestet mit bash Version 5.3.9 unter Ubuntu 26.04.