Mam następujący kod w powłoce.
To nie działa. Więc nie wiem, jaki jest mój błąd. Zastanawiałem się, czy ktoś może mi pomóc
echo $i | awk -F "," "{if(NF == 1) print "Exiting..." system("exit")}"
więc $i
jest parametrem na przykład hi,hello
. A jeśli liczba pól jest równa 1, chciałbym, aby program zakończył działanie.
Odpowiedzi:
2 dla odpowiedzi № 1Nie możesz wywołać wyjścia przez system, ponieważ awkjest wykonywany w osobnym procesie. Można jednak wywołać exit z awk z określonym kodem błędu, a następnie zamknąć skrypt w zależności od kodu błędu. Przykład:
awk -F "," "{if(NF==1){ print "Exiting"; exit -1}}" || exit
3 dla odpowiedzi № 2
Awk nie może wymusić zakończenia procesu nadrzędnego, ale można zmienić kod tak, aby powłoka wywołująca zakończyła działanie.
W tym ograniczonym kontekście wcale nie potrzebujesz Awk.
case $i in
*,* ) ;; # nothing
* ) echo Exiting... >&2; exit 1;;
esac