2010-02-22 23 views
5

Mam skrypt bash, w którym sprawdzam kod zakończenia ostatniego polecenia uruchomienia, używając $? zmienna, ale teraz wykonuję program C (z tego skryptu), który zwraca 0, jeśli program zostanie pomyślnie wykonany. Czy jest jakiś sposób mogę złapać tę wartość zwracaną programu C z w moim skrypcie bash?Sprawdzanie wartości zwracanej programu C w skrypcie basha?

Wierzę, że różne polecenia, takie jak awk, sed itp., Są napisane w C. Jak używają $? przechowywać w nim swoje kody wyjścia? Jak mogę uczynić mój program C do przechowywania kodu wyjścia w $?

Mam nadzieję, że moje pytanie jest jasne.

Odpowiedz

11

Nie musisz nic robić - jeśli twój program C zwróci 0, to będzie on przechowywany w zmiennej $? powłoki, która ją wykonała.

+0

Status wyjścia jest ograniczony tylko do 8 bitów, więc tylko najniższe 8 bitów tego, co program zwróci, zostanie zapisane w $? –

+0

@Chris Dodd - POSIX tak czy inaczej ogranicza wartość zwracaną do wartości 0 - 255, więc 8-bitowa pamięć nie stanowi problemu, jest to optymalizacja. –

1

bash przechwytuje kod zakończenia w $? automagicznie. Lub możesz po prostu użyć komendy w if, jeśli zależy ci tylko na zerowym/niezerowym.

1

Kod powrotu programu C to wartość zwracana przez funkcję int main() lub argument funkcji exit(). System następnie udostępnia go procesowi nadrzędnemu za pośrednictwem wywołania systemowego wait(). Kiedy proces nadrzędny to bash, wartość ta jest następnie udostępniana poprzez zmienną $?.

+0

Co sprawia, że ​​uważasz, że w grę wchodzi errno? –

+0

Przyjmuję założenie, że nowy proces jest tworzony za pomocą 'fork()' i jego strona man wspomina o tym. Czy się mylę? – mouviciel

+0

Cóż, Windows (na którym używam bash) nie ma fork(). W ciągu 25 lat programowania w systemie UNIX nigdy nie widziałem sugestii, że errno jest powiązane z wartością wyjściową procesu. Nie mówię, że się mylisz, ale potrzebowałbym rozdziału i wersetu, zanim powiem, że masz rację. –

Powiązane problemy