[fpc-pascal] How to exec() arguments with spaces?
Marco van de Voort
marcov at stack.nl
Fri Nov 26 20:37:52 CET 2004
> I cannot process this way any file that name contains whitespaces.
> Replacing 'my file' with '"my file"', 'my\ file', '"my\ file"'
> has no effect; apart from that exec(myprog, '"myfile"') does not work
> even if filename has no spaces.
> The problem seems to depend on the way of passing arguments to the
> program, not on the program itself: many programs like /bin/cat,
> /bin/gzip, and others behave similarily.
>
> Using
> execv(myprog + ' '+myfile);
> exec(myprog+ ' '+myfile, '');
> result the same.
> The problem is only in Unix. What am I doing wrong?
The harsh answer:
1 using spaces in unix :-)
2 using 1.0.x, while 1.9.x is so much better.
The explanation:
Seriously, it was a bug, it is fixed. To avoid similar problems, 1.9.2 and later
have a function sysutils.executeprocess that avoids it all together by avoiding the
parsing stage and passing arguments separately from the executable name.
sysutils.executeproces('/path to/the file/ with a space',['arg1 arg2','arg2 arg3']);
The exec[v|e|p] functions are renamed to fpexec() and also have this.
More information about the fpc-pascal
mailing list