W pierwszym przybliżeniu 0 oznacza powodzenie, niezerowe oznacza awarię, przy czym 1 oznacza awarię ogólną, a wszystko większe niż jedno oznacza awarię konkretną. Oprócz trywialnych wyjątków fałszowania i testowania, które są zaprojektowane tak, aby dać 1 dla powodzenia, znalazłem kilka innych wyjątków.
Bardziej realistycznie, 0 oznacza sukces, a może porażkę, 1 oznacza ogólną porażkę, a może sukces, 2 oznacza ogólną porażkę, jeśli 1 i 0 są użyte zarówno do sukcesu, ale może również sukcesu.
Polecenie diff daje 0, jeśli porównywane pliki są identyczne, 1, jeśli się różnią, i 2, jeśli pliki binarne są różne. 2 oznacza także awarię. Komenda less daje 1 za niepowodzenie, chyba że nie podasz argumentu, w którym to przypadku kończy 0, pomimo niepowodzenia.
Komenda more i komenda spell dają 1 za niepowodzenie, chyba że niepowodzenie jest wynikiem odmowy dostępu, nieistniejącego pliku lub próby odczytania katalogu. W każdym z tych przypadków wychodzą one z wartości 0 pomimo niepowodzenia.
Następnie polecenie expr daje 1 dla powodzenia, chyba że wynikiem jest pusty ciąg znaków lub zero, w którym to przypadku 0 oznacza powodzenie. 2 i 3 są porażką.
Są też przypadki, w których sukces lub porażka są niejednoznaczne. Gdy grep nie znajdzie wzorca, kończy 1, ale kończy 2 dla prawdziwej awarii (np. Odmowa zgody). Klist wychodzi również z 1, gdy nie może znaleźć biletu, chociaż tak naprawdę nie jest to więcej niż awaria niż wtedy, gdy grep nie znajduje wzorca lub gdy masz pusty katalog.
Tak więc, niestety, moce uniksowe, które wydają się nie wymuszać żadnego logicznego zestawu reguł, nawet w przypadku bardzo często używanych plików wykonywalnych.