with fancywrap, with -x foobinary fooname foocommand: foobinary always becomes the interpreter, regardless of foocommand:1 ps shows fooname instead of the interpreter as interpreter for foocommand, ps |grep $$ show the "real" interpreter with fancywrap, without -x, only foocommand: foocommand:1 decides about the interpreter, fails if wrong without fancywrap, the behaviour _is_ accordingly. probably the shell uses the same execv() function.