A set -eo pipefail eltér a ksh és a bash

Szeretnék leállítani egy szkriptet minden meghibásodás esetén, beleértve a cső belsejét is. A bash-ban set -eo pipefail lehet, de ez nem működik a ksh fájlban.

Példa:

# 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 

Miért nem lépne ki a ksh ebben az esetben?

Szerkesztés: Újabb teszt hozzáadása

Ezt összehasonlítottam másokkal kagyló és különböző eredményeket érek el:

-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 

A ksh hibáján kívül nem értem, mi okozhatja ezt a viselkedést. Az ember szerint 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. 

Megjegyzések

  • Használhatja a ksh93 kérdéses verzióját. A várt módon működik a ksh93 t + verzióval 2010-től az OpenSolaris és a BTW részéről: ez a valaha látott leggyorsabb ksh93.
  • Az OpenBSD ksh93 u + kinyomtatja az elkészült üzenetet, fwiw.
  • @Shawn, ami nem meglepő, mivel ' ugyanaz a verzió, mint az OP ' s 😉
  • Most is megpróbáltam a linuxon. ... 2020.0.0 ugyanúgy viselkedik. Frissítem a kérdést egy másik te-vel st

Válasz

Úgy néz ki, mint a ksh93u + által bevezetett regresszió. A ksh93u a várakozásoknak megfelelően működött ebben a tekintetben (és hasonlóan a zsh, bash, mksh, yash és busybox sh fájlokhoz).

Csak felvetettem a problémát a következő helyen: https://github.com/ksh93/ksh/issues/121

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük