set -eo pipefail diferă pe ksh și bash

Aș dori să termin un script pentru orice eșec, inclusiv în interiorul unei conducte. În bash, puteți set -eo pipefail, dar acest lucru nu funcționează în ksh.

Exemplu:

# 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 

De ce nu ar ieși ksh în acest caz?

Editare: Adăugarea unui alt test

Am comparat acest lucru cu altul obține rezultate diferite:

-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 

În afară de o eroare din ksh, nu înțeleg ce ar putea provoca acest comportament. Potrivit 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. 

Comentarii

  • Puteți utiliza o versiune îndoielnică a ksh93. Funcționează conform așteptărilor cu ksh93 t + din 2010 de la OpenSolaris și BTW: acesta este cel mai rapid ksh93 văzut vreodată.
  • OpenBSD ksh93 u + tipărește mesajul făcut, fwiw.
  • @Shawn ceea ce nu este surprinzător, deoarece ' este aceeași versiune ca OP ' s 😉
  • Tocmai am încercat și pe Linux. Versiunea ... 2020.0.0 are același comportament. Voi actualiza întrebarea cu un alt te st

Răspuns

Pare o regresie introdusă de ksh93u +. ksh93u a funcționat așa cum era de așteptat în acest sens (și cum ar fi zsh, bash, mksh, yash și busybox sh).

Tocmai am ridicat problema la https://github.com/ksh93/ksh/issues/121

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *