Próbuję poprawić mój skrypt powiadamiający. Sposób działania skryptu polega na tym, że umieściłem go za długo działającym poleceniem powłoki, a następnie wszystkie rodzaje powiadomień są wywoływane po zakończeniu długiego działania skryptu.Uzyskiwanie kodu wyjścia ostatniego polecenia powłoki w innym skrypcie
Na przykład:
sleep 100; my_notify
Byłoby miło, aby uzyskać kod zakończenia długiego skrypt uruchomiony, problemem jest to, że wywołanie my_notify
tworzy nowy proces, który nie ma dostępu do zmiennej $?
.
Porównaj:
~ $: ls nonexisting_file; echo "exit code: $?"; echo "PPID: $PPID"
ls: nonexisting_file: No such file or directory
exit code: 1
PPID: 6203
vs.
~ $: ls nonexisting_file; my_notify
ls: nonexisting_file: No such file or directory
exit code: 0
PPID: 6205
Skrypt my_notify
ma w nim następujące:
#!/bin/sh
echo "exit code: $?"
echo "PPID: $PPID"
szukam sposób, aby uzyskać kod zakończenia poprzednie polecenie bez zbytniej zmiany struktury polecenia. Mam świadomość, że jeśli zmienię to tak, by działał bardziej jak time
, np. my_notify longrunning_command...
mój problem zostałby rozwiązany, ale ja naprawdę podoba mi się, że mogę to zrobić pod koniec polecenia i obawiam się komplikacji tego drugiego rozwiązania.
Czy można to zrobić, czy jest to zasadniczo niezgodne ze sposobem działania muszli?
Moja powłoka to zsh
, ale chciałbym, aby działała również z bash
.