ubuntuusers.de

WTF - Befehlswort erforschen

Status: Ungelöst | Ubuntu-Version: Ubuntu 26.04 (Resolute Raccoon)
Antworten |

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 10395

Wohnort: Münster

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.

Dimanche Team-Icon

Ikhayateam

Anmeldungsdatum:
20. Juli 2007

Beiträge: 2230

Script unter Noble und bash 5.2.2 getestet:

Funktioniert 👍

fallon@fallon-V15:~$ ?? chmod

chmod ist /usr/bin/chmod
chmod ist /bin/chmod
chmod (1)            - change file mode bits
chmod: /usr/bin/chmod /usr/share/man/man1/chmod.1.gz
-rwxr-xr-x 1 root root 55816 Jan 23 14:30 /usr/bin/chmod
fallon@fallon-V15:~$ 

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 195

Kleine Anmerkung.

file

wäre bestimmt noch sinnvoll. Bsp. bei egrep, xdg-open, yt-dlp, alsa etc.

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 195

?

2* Alias, $1 Alias wird ausgeführt, $2 nicht. Bei Allen. Nur Hier so?

$ ?? ll
ls ist ein Alias von »ls --color=auto«.
ls ist /usr/bin/ls
ls ist /bin/ls
...
###
$ ?? ll ll
ls ist ein Alias von »ls --color=auto«.
ls ist /usr/bin/ls
ls ist /bin/ls
...

ll ist ein Alias von »ls -alF«.

kB Team-Icon

Supporter, Wikiteam
(Themenstarter)
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 10395

Wohnort: Münster

Maranto schrieb:

? […]

Die Funktionsweise von alias und die Kunst des Quotierens sind immer wieder gut für Überraschungen.

Vgl. z.B.:

?? '??' ?? 

oder

?? 'll'
?? ll

Weiteres Nachdenken ergab aber, dass alles so funktioniert wie in der einschlägigen Dokumentation beschrieben.

Maranto

Anmeldungsdatum:
1. Mai 2026

Beiträge: 195

Auf die Idee kam ich gar nicht erst. Nun ja!

Antworten |