set -eo pipefail różni się w ksh i bash

Chciałbym zakończyć skrypt w przypadku każdej awarii, w tym w potoku. W bashu możesz set -eo pipefail, ale to nie działa w ksh.

Przykład:

# x set -eo pipefail false | true echo "done: $?" # reached in ksh, unexpected false echo "done2" # not reached in either shell, as expected 
bash x # prints nothing, as expected ksh x # done: 1 ksh --version # ... 93u+ 2012-08-01 

Dlaczego ksh nie miałby zakończyć pracy w tym przypadku?

Edycja: Dodanie kolejnego testu

Porównałem to z innymi powłoki i otrzymuję różne wyniki:

-bash-5.0$ zsh -c "set -eo pipefail; false | true; exit 2" ; echo $? 1 -bash-5.0$ ksh -c "set -eo pipefail; false | true; exit 2"; echo $? 2 -bash-5.0$ bash -c "set -eo pipefail; false | true; exit 2" ; echo $? 1 

Poza błędem w ksh, nie rozumiem, co może powodować takie zachowanie. Według man ksh:

-e Unless contained in a ⎪⎪ or && command, or the command following an if while or until command or in the pipeline following !, if a command has a non-zero exit # Pipeline does not follow ! status, execute the ERR trap, if set, and exit. This # Pipeline has a non-zero exit status mode is disabled while reading profiles. pipefail A pipeline will not complete until all components of the pipeline have completed, and the return value will be the value of the last non-zero command to fail or zero if no command has failed. 

Komentarze

  • Możesz użyć wątpliwej wersji ksh93. Działa zgodnie z oczekiwaniami z ksh93 t + od 2010 z OpenSolaris i BTW: jest to najszybszy ksh93, jaki kiedykolwiek widziano.
  • OpenBSD ksh93 u + wyświetla gotową wiadomość, fwiw.
  • @Shawn, co nie jest zaskakujące, ponieważ ' to ta sama wersja co OP ' s 😉
  • Właśnie wypróbowałem również na Linuksie. Wersja ... 2020.0.0 zachowuje się tak samo. Zaktualizuję pytanie innym te st

Odpowiedź

Wygląda na regresję wprowadzoną przez ksh93u +. ksh93u działał pod tym względem zgodnie z oczekiwaniami (i podobnie jak zsh, bash, mksh, yash i busybox sh).

Właśnie poruszyłem ten problem na https://github.com/ksh93/ksh/issues/121

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *