true
- true – prosta komenda zwracająca zawsze powodzenie (kod wyjścia
0
) i nie zapisująca nic na standardowe wyjście. - Stosowana w warunkach (
if
,until
), pętlach (while
), potokach oraz do neutralizowania błędów (|| true
) w skryptach CI. - Dostępna w większości dystrybucji Linuksa jako część GNU coreutils; wiele powłok (bash, dash, busybox sh) oferuje także wbudowaną wersję
true
. Istnieje również odpowiednik w postaci wbudowanej komendy powłoki:
(dwukropek).
Składnia
Dział zatytułowany „Składnia”true [ARG...]
- Argumenty (jeśli podane) są ignorowane.
- Wspólne przełączniki globalne (GNU):
--help
,--version
.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
ARG... | Dowolne argumenty, które są ignorowane — zachowanie pozostaje takie samo (zwraca 0 , brak wyjścia). |
--help | Krótka pomoc. |
--version | Informacja o wersji (GNU coreutils). |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1) Pętla nieskończona (idiomatycznie używa się też wbudowanego ':')while true; do echo "Działa..." sleep 1done
Efekt: pętla wykonuje się bez końca, co sekundę wypisując komunikat.
# 2) Ignorowanie błędu komendy (np. w CI)make test || true
Efekt: nawet gdy make test
zwróci błąd, skrypt zakończy się sukcesem (kod 0) i wykona kolejne kroki.
# 3) Warunek zawsze spełnionyif true; then echo "OK"fi
Efekt: wypisze OK
, ponieważ warunek zawsze jest prawdziwy.
# 4) Zabezpieczenie potoku (uwaga na pipefail)zapytanie | przetwarzanie || true
Efekt: bez set -o pipefail
ewentualne błędy wcześniejszych poleceń w potoku mogą zostać „zamaskowane” przez true
.
- Wydajność: gdy zależy Ci na minimalnym koszcie wywołania w pętli, użyj wbudowanego dwukropka
:
zamiast zewnętrznego programutrue
(brak uruchamiania nowego procesu). - POSIX:
true
nie definiuje opcji ani operandów — wszystko jest ignorowane; gwarantuje tylko kod0
i brak wyjścia. - Powłoka vs zewnętrzny program:
type -a true
pokaże, czy Twoja powłoka ma wbudowanetrue
. W skryptach nie jest wymagane pełne/bin/true
. - Pipefail: umieszczanie
... | true
na końcu potoku może ukryć błędy wcześniejszych komend. Włączset -o pipefail
, jeśli chcesz, by niezerowe kody z wcześniejszych etapów nie zostały zignorowane. - Para do testów: komenda odwrotna to
false
(zwraca kod1
).
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 |
---|---|---|
Oczekiwano wyjścia na ekranie, a nic się nie pojawia | true nic nie wypisuje – to normalne | Użyj w if /pętli lub sprawdź kod wyjścia: echo $? po uruchomieniu. |
Błędy w potokach „znikają” | true na końcu potoku sprawia, że status całego potoku bywa 0 | Włącz set -o pipefail lub nie używaj true na końcu potoku, jeżeli chcesz propagować błędy. |
Skrypt działa wolno w pętli | Wielokrotne uruchamianie zewnętrznego /bin/true | Zastąp true wbudowanym : albo upewnij się, że używasz wbudowanej wersji powłoki. |
command not found: true w bardzo minimalnym środowisku | Brak /bin/true i brak wbudowanej komendy w danej powłoce | Użyj : (wbudowane w POSIX sh) lub zainstaluj pakiet coreutils/busybox. |
Linki i źródła
Dział zatytułowany „Linki i źródła”- man true – oficjalna dokumentacja.
- GNU coreutils – „true invocation” – opis działania i opcji.
- POSIX
true
– specyfikacja standardu.