env
- env – program z pakietu coreutils (oraz standardu POSIX) umożliwiający wyświetlenie bieżącego środowiska lub uruchomienie komendy z tymczasowo zmodyfikowanymi zmiennymi.
- Stosowany do czyszczenia środowiska (
-i
), debugowania konfiguracji (env | sort
), pisania przenośnych shebangów (#!/usr/bin/env python3
) oraz w skryptach CI/CD do ustawiania parametrów przy wywołaniu. - Dostępny w niemal wszystkich systemach Unix/Linux, macOS, BSD, BusyBox i jako narzędzie w MSYS/MinGW.
Składnia
Dział zatytułowany „Składnia”env [opcje] # wypisuje wszystkie zmienne środowiskowe
env [opcje] [VAR=wartość ...] [polecenie [arg ...]]
- Sekwencja
VAR=wartość
przed poleceniem ustawia/zmienia zmienną tylko na czas jego trwania. - Jeśli nie podano polecenia,
env
wypisuje środowisko po uwzględnieniu zmian.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
-i , --ignore-environment | Uruchamia z pustym środowiskiem, poza zmiennymi przekazanymi w linii poleceń. |
-u <VAR> , --unset=<VAR> | Usuwa wskazaną zmienną z odziedziczonego środowiska. |
-C <DIR> | Zmienia katalog roboczy przed uruchomieniem polecenia. |
-0 , --null | Wypisuje zmienne zakończone znakiem NUL zamiast \n (współpraca z xargs -0 ). |
-S , --split-string=<STR> | Dzieli podany ciąg na zmienne i argumenty według reguł powłoki (GNU rozszerzenie). |
--debug | Wyświetla szczegółowe komunikaty o przetwarzaniu (GNU). |
--help | Krótka pomoc. |
--version | Wersja programu. |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1. Wypisanie środowiska posortowanego alfabetycznieenv | sort
# 2. Uruchomienie komendy z tymczasową zmianą $PATHenv PATH="/opt/custom/bin:$PATH" mytool --version
# 3. Całkowicie czyste środowisko (tylko HOME i PATH)env -i HOME="$HOME" PATH="/usr/bin" bash --noprofile
# 4. Usunięcie zmiennej DEBUG i uruchomienie testówenv -u DEBUG pytest -q
# 5. Shebang transportowy w skrypcie Pythona#!/usr/bin/env python3print("Hello portable world")
- Scope: Zmienne ustawione przez
env VAR=... cmd
obowiązują tylko w uruchamianym procesie i jego dzieciach – nie zmieniają bieżącej powłoki. - Pusty environment: Opcja
-i
może złamać programy oczekująceHOME
,USER
,PATH
; dodaj niezbędne zmienne ręcznie. - Ścieżka shebang:
#!/usr/bin/env <interpreter>
znajduje interpreter według$PATH
, zwiększając przenośność między systemami (np.python
,node
). - Split‑string:
env -S 'VAR=val cmd -o "arg with space"'
pozwala uniknąć cytowania w złożonych wywołaniach (GNU ≥ 8.30). - Bezpieczeństwo: Przy uruchamianiu zaufanych programów z nieznanych skryptów rozważ
env -i
aby wyeliminować wpływ złośliwych zmiennych (LD_PRELOAD
,PYTHONPATH
).
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 | |
---|---|---|---|
env: 'cmd': No such file or directory | Komenda nieznaleziona w nowym $PATH | Dodaj poprawny PATH= lub użyj pełnej ścieżki. | |
Program nie działa pod -i | Brak kluczowych zmiennych (LANG , TERM ) | Przekaż wymagane zmienne w linii poleceń. | |
Shebang /usr/bin/env python używa złej wersji | $PATH wskazuje inny interpreter | Ustaw wirtualne środowisko lub w shebang podaj python3 . | |
Zmienne z `env | sortprzesłaniają wynik export` | env pokazuje runtime środowiska, export – zmienne zadeklarowane w bieżącej powłoce | Do debugowania używaj obu poleceń. |
Linki i źródła
Dział zatytułowany „Linki i źródła”- man env – oficjalna dokumentacja.
- GNU coreutils – env – pełny manual.
- POSIX spec – env – standard opisujący zachowanie.