[xmonad] sh-less spawn?
wferi at niif.hu
Tue Sep 21 16:25:34 EDT 2010
Joachim Breitner <mail at joachim-breitner.de> writes:
> -- | Like 'spawn', but returns the 'ProcessID' of the launched application
> spawnPID :: MonadIO m => String -> m ProcessID
> spawnPID x = io . forkProcess . finally nullStdin $ do
> executeFile "/bin/sh" False ["-c", x] Nothing
> Generally, this is of course useful. But I bet that most commands passed
> to spawn are simple program names without arguments or any fancy
> shell-related stuff. Executing a shell here seems overkill. Not much,
> but still avoidable.
> How about checking whether the argument x contains only alphanumerical
> characters and, if that is the case, executing the program directly?
> Such short-circuit logic is for example also used by perl’s sytem(), see
> perldoc -f system:
I'm not a big fan of perl's all-implicit behaviour. I'd rather rename
spawnShell(PID) x = spawn(PID) "/bin/sh" ["-c", x]
and make the shell invocation explicit. If such incompatible change is
impossible, then make it
spawn(PID) x = execute(PID) "/bin/sh" ["-c", x]
or similar. Meanwhile, use exec to get rid of the shell process. :)
More information about the xmonad