2017-03-12 4 views
0

Quand je lance cette commandebash sur ubuntu 16: set -e pas héritant l'intérieur des sous-shell

set -e; echo $(echo "$-"); 

Je reçois himBH comme sortie. Je m'attendais à ce que la lettre e soit incluse dans la sortie. Que se passe-t-il?

Je suis sur Ubuntu 16.04.1 LTS avec bash GNU version 4.3.46 (1) -release (x86_64-pc-linux-gnu)

+0

'set -e' est ... * controversé * - son comportement varie entre les versions shell et est souvent très surprenant. Pensez à lire [BashFAQ # 105] (http://mywiki.wooledge.org/BashFAQ/105). –

Répondre

1

Les substitutions de commandes ne possèdes pas l'option errexit à moins que vous sont en mode POSIX ou vous utilisez l'option shell inherit_errexit (ajoutée à bash 4.4).

192% bash -ec 'echo "$(echo "$-")"' 
hBc 
192% bash --posix -ec 'echo "$(echo "$-")"' 
ehBc 
192% bash -O inherit_errexit -ec 'echo "$(echo "$-")"' # 4.4+ 
ehBc