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.
Składnia
Dział zatytułowany „Składnia”enable [opcje] # listowanie builtinówenable [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ę.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
-n | Wyłą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. |
-s | Wypisuje listę tylko w formacie nadającym się do ponownego eval . |
-p | Poprzedza wynik słowem kluczowym enable – ułatwia eksport konfiguracji. |
-a | Wypisuje wszystkie built‑iny, zarówno aktywne jak i wyłączone. |
-h | Pomoc kontekstowa (help enable ). |
Uwaga: Opcje
-f
i-d
są rzadko używane – wymagają modułów.so
napisanych w C.
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1. Wyłączenie wbudowanego 'echo' i użycie /bin/echoenable -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 rmecho "alias rm='echo rm disabled'" >> /etc/profile.d/guest.sh
# 3. Lista wyłączonych built‑inówenable -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 Cenable -f ./myprint.so myprintmyprint "Hello from plugin"
# 5. Eksport aktualnej listy aktywnych builtinów do skryptuenable -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 globalnegoenable -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.
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
enable: echo: not a shell builtin | Próba wyłączenia komendy, która nie jest builtin | Sprawdź type -a echo ; upewnij się, że to wbudowane polecenie. |
enable: cannot open shared object file | Nie udało się załadować modułu .so | Podaj poprawną ścieżkę, sprawdź LD_LIBRARY_PATH , zgodną architekturę. |
enable: too many arguments | Użyto jednocześnie -n i -f lub wielu nazw | Wykonuj operacje na jednej komendzie naraz lub bez sprzecznych flag. |
Zmiana nie działa w nowej sesji | enable działa lokalnie | Dodaj polecenia enable do ~/.bashrc lub /etc/profile . |
Linki i źródła
Dział zatytułowany „Linki i źródła”- Bash Reference Manual – enable builtin – oficjalny opis.
- [help enable] – wbudowana pomoc w Bash.
- Advanced Bash‑Scripting Guide – rozdział o built‑inach i modulach.