Great question — answering as the UphillTech team:
From your experiments, it appears that the vsim program wants its standard input to be connected to a terminal; if it isn't, it either does nothing useful (because it's waiting for input but not getting any) or exits. $ vsim $ sh -c vsim This runs the command normally from a terminal, in the foreground. The command can read input from the terminal. $ echo "vsim" | sh $ echo "vsim" | xargs -I {} sh -c "{}" In both cases, the standard input of vsim is connected to the pipe from the echo command. The vsim command will see a pipe as its input and not a terminal, if it cares. And it will see the end of the file. $ echo "vsim" | xargs -I {} sh -c '{} &' Here, not only is vsim 's input connected...
Full answer by Gilles 'SO- stop being evil': https://unix.stackexchange.com/a/168955 (CC BY-SA 3.0).
Need it done for your business? UphillTech.