Praxis | Terminal | Hermann Apfelböck | 4/2025 | 30. Mai 2025

Interne Bash-Kommandos abschalten

Interne Bash-Befehle abschalten: Der „Enable“-Befehl hat auch vor fundamentalen Kommandos keinerlei Respekt.

Wer mit Kommando-Shells vertraut ist, kennt den Unterschied zwischen externen Programmen (die meisten unter „/usr/bin“ und „/usr/sbin”) und den internen Funktionen der Shell selbst. Zu den letzteren gehören etwa Fundamente wie der alias- oder der cd-Befehl. Dass die Shell diese Fundamente komplett abschalten kann, ist kaum bekannt.

Was die Bash-Shell an eigenen „Built-in“-Kommandos anbietet, ist überschaubar. Der Befehl 

help

zeigt etwa 70 Kommandos, darunter viele alltagsrelevante (alias, bind, cd, disown, history, exit) und Script-relevante (for, function, if, while). In dieser Liste erscheint auch der Befehl „enable“, und dieser kann jeden internen Befehl (inklusive sich selbst) abschalten oder einschalten. Nach 

enable -n cd

gibt es keinen Verzeichniswechsel mit „cd“ mehr. Primäre Aufgabe des Enable-Befehls ist es, ein gleichlautendes und eventuell besseres externes Programm zu ermöglichen. 

Die Bash priorisiert nämlich die internen Funktionen, sodass etwa der externe Kill-Befehl nur mit genauer Pfadangabe funktioniert („/usr/bin/kill“). Aber mit „enable -n […]“ sind natürlich auch gezielte Restriktionen möglich. 

So können Sie sich oder andere durch Abschalten des cd-Befehls nachhaltig dazu disziplinieren, für Verzeichniswechsel das an sich funktionsreichere pushd zu verwenden. 

Zur „Rechtslage“: Den Bash-Befehl „enable“ darf jedes normale Benutzerkonto uneingeschränkt einsetzen. Wenn allerdings im globalen Initial-Script „/etc/bash.bashrc“ einige Befehle mit „enable -n [Befehl]“ abgeschaltet werden und zusätzlich mit 

enable -n enable

der Enable-Befehl selbst, dann ist das interaktiv in der Shell nicht zu korrigieren (auch nicht als root). Nur das erneute Editieren der „/etc/bash.bashrc“ als root oder mit sudo-Recht kann die abgeschalteten Bash-Befehle wieder reaktivieren.