1*13de33a5SJulio MerinoIFS=, 2*13de33a5SJulio Merino 3*13de33a5SJulio MerinoSPECIAL="break,\ 4*13de33a5SJulio Merino :,\ 5*13de33a5SJulio Merino continue,\ 6*13de33a5SJulio Merino . /dev/null,\ 7*13de33a5SJulio Merino eval,\ 8*13de33a5SJulio Merino exec,\ 9*13de33a5SJulio Merino export -p,\ 10*13de33a5SJulio Merino readonly -p,\ 11*13de33a5SJulio Merino set,\ 12*13de33a5SJulio Merino shift 0,\ 13*13de33a5SJulio Merino times,\ 14*13de33a5SJulio Merino trap,\ 15*13de33a5SJulio Merino unset foo" 16*13de33a5SJulio Merino 17*13de33a5SJulio MerinoUTILS="alias,\ 18*13de33a5SJulio Merino bg,\ 19*13de33a5SJulio Merino bind,\ 20*13de33a5SJulio Merino cd,\ 21*13de33a5SJulio Merino command echo,\ 22*13de33a5SJulio Merino echo,\ 23*13de33a5SJulio Merino false,\ 24*13de33a5SJulio Merino fc -l,\ 25*13de33a5SJulio Merino fg,\ 26*13de33a5SJulio Merino getopts a var,\ 27*13de33a5SJulio Merino hash,\ 28*13de33a5SJulio Merino jobs,\ 29*13de33a5SJulio Merino printf a,\ 30*13de33a5SJulio Merino pwd,\ 31*13de33a5SJulio Merino read var < /dev/null,\ 32*13de33a5SJulio Merino test,\ 33*13de33a5SJulio Merino true,\ 34*13de33a5SJulio Merino type ls,\ 35*13de33a5SJulio Merino ulimit,\ 36*13de33a5SJulio Merino umask,\ 37*13de33a5SJulio Merino unalias -a,\ 38*13de33a5SJulio Merino wait" 39*13de33a5SJulio Merino 40*13de33a5SJulio Merinoset -e 41*13de33a5SJulio Merino 42*13de33a5SJulio Merino# With 'command', variable assignments do not affect the shell environment. 43*13de33a5SJulio Merino 44*13de33a5SJulio Merinoset -- ${SPECIAL} 45*13de33a5SJulio Merinofor cmd in "$@" 46*13de33a5SJulio Merinodo 47*13de33a5SJulio Merino ${SH} -c "VAR=0; VAR=1 command ${cmd}; exit \${VAR}" >/dev/null 2>&1 48*13de33a5SJulio Merinodone 49*13de33a5SJulio Merino 50*13de33a5SJulio Merinoset -- ${UTILS} 51*13de33a5SJulio Merinofor cmd in "$@" 52*13de33a5SJulio Merinodo 53*13de33a5SJulio Merino ${SH} -c "VAR=0; VAR=1 command ${cmd}; exit \${VAR}" >/dev/null 2>&1 54*13de33a5SJulio Merinodone 55