If there is more than one argument in LIST, or if LIST is an array with
more than one value, calls execvp(3) with the arguments in LIST. If
there is only one scalar argument, the argument is checked for shell
metacharacters. If there are any, the entire argument is passed to
/bin/sh -c
for parsing. If there are none, the argument is split
into words and passed directly to execvp(), which is more efficient.
Note:
exec()
(and system(0) do not flush your output buffer, so you may
need to set
$|
to avoid lost output. Examples:
If you don't really want to execute the first argument, but want to lie to the program you are executing about its own name, you can specify the program you actually want to run as an ``indirect object'' (without a comma) in front of the LIST. (This always forces interpretation of the LIST as a multi-valued list, even if there is only a single scalar in the list.) Example:
or, more directly,