Przejdź do głównej zawartości

enable


  • enable – builtin powłoki Bash służący do dynamicznego włączania lub wyłączania innych poleceń wbudowanych (built‑ins) oraz do nadpisywania ich nazw zewnętrznymi programami z $PATH.
  • Przydatny w skryptach wymagających przywrócenia oryginalnego zachowania polecenia (command, echo, test) albo całkowitego ukrycia ryzykownych komend (kill, source) w środowiskach ograniczonych.
  • Działa tylko w ramach bieżącej instancji powłoki lub subshella; zmiany nie są globalne dla systemu.

Okno terminala
enable [opcje] # listowanie builtinów
enable [opcje] -n <cmd> # wyłączenie built‑inu <cmd>
enable [opcje] <cmd> # włączenie built‑inu <cmd>
  • Wywołane bez argumentów drukuje listę aktywnych builtinów.
  • Flaga -n przed nazwą cmd powoduje dezaktywację; brak -n – aktywację.

ParametrOpis
-nWyłącza wskazany builtin, pozwalając wywołać zewnętrzny program o tej samej nazwie.
-f <plik>Ładuje builtin jako moduł dynamic loading (jeśli Bash skompilowany z --enable‑plugin).
-d <cmd>Usuwa wcześniej załadowany moduł built‑inu.
-sWypisuje listę tylko w formacie nadającym się do ponownego eval.
-pPoprzedza wynik słowem kluczowym enable – ułatwia eksport konfiguracji.
-aWypisuje wszystkie built‑iny, zarówno aktywne jak i wyłączone.
-hPomoc kontekstowa (help enable).

Uwaga: Opcje -f i -d są rzadko używane – wymagają modułów .so napisanych w C.


Okno terminala
# 1. Wyłączenie wbudowanego 'echo' i użycie /bin/echo
enable -n echo
/bin/echo "To jest echo z coreutils"
enable echo # ponowne włączenie
# 2. Blokowanie 'rm' w ochronionym shellu (np. konto gościa)
enable -n rm
echo "alias rm='echo rm disabled'" >> /etc/profile.d/guest.sh
# 3. Lista wyłączonych built‑inów
enable -p -a | grep '^enable -n'
# 4. Załadowanie własnego built‑inu z modułu (Bash ≥4.0)
# gcc -fPIC -shared -o myprint.so myprint.c # kompilacja C
enable -f ./myprint.so myprint
myprint "Hello from plugin"
# 5. Eksport aktualnej listy aktywnych builtinów do skryptu
enable -ps > builtin_state.sh # później: source builtin_state.sh

  • Scope: Wyłączenie built‑inu dotyczy tylko bieżącego procesu Bash; subshelle (bash -c, () ) dziedziczą stan w momencie forka.
  • Bezpieczeństwo: Można tymczasowo zablokować krytyczne polecenia w sesji powłoki (np. enable -n eval exec).
  • Alternatywy: command -p lub pełna ścieżka (/bin/echo) omija builtin bez globalnego enable -n.
  • Moduły dynamiczne: W praktyce rzadko spotykane poza demonstracjami; większość dystrybucji kompiluje Bash bez wsparcia pluginów.
  • Konflikty nazw: Jeśli istnieje alias o tej samej nazwie, kolejność rozstrzyga: alias → funkcja → builtin → zewnętrzny plik wykonywalny.

Błąd / KomunikatPrzyczynaRozwiązanie
enable: echo: not a shell builtinPróba wyłączenia komendy, która nie jest builtinSprawdź type -a echo; upewnij się, że to wbudowane polecenie.
enable: cannot open shared object fileNie udało się załadować modułu .soPodaj poprawną ścieżkę, sprawdź LD_LIBRARY_PATH, zgodną architekturę.
enable: too many argumentsUżyto jednocześnie -n i -f lub wielu nazwWykonuj operacje na jednej komendzie naraz lub bez sprzecznych flag.
Zmiana nie działa w nowej sesjienable działa lokalnieDodaj polecenia enable do ~/.bashrc lub /etc/profile.