Are you actually using exec before each xinput command? If so, only your first xinput command actually gets run. exec replaces the currently running process, effectively making it run-this-and-exit.
$ cat ./a.sh
#!/bin/sh
exec /bin/echo foo &
exec /bin/echo bar &
which outputs foo and bar. Seems like a special case, just like exec without a command for file descriptor redirection.