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.

