[fpc-pascal] Exec with many params
Marco van de Voort
marcov at stack.nl
Thu Jun 23 10:08:36 CEST 2005
> a single parameter when executing a file
> let's change the above example to
> cat ~/anyfile1 ~/anyfile2
> or just:
> dir /p c:
>
> or anything else, which needs many params
>
> Anyway, if using the shell() would help in linux, it's a good hint.
> But for portability what do I do in other OS?
>
> I'm just pointing out the more than one parameter execution of a command
There are three different things that could be wrong:
1. you are using the wrong function, or using it the wrong way. Show code.
2. Under unix, when executing _directly_ parameters are not separated by
whitespace but as separate arguments.
3. Under Unix, programs typically don't process things like ? and *, the
shell does. So if you do something with a *, you _must_ go via
the shell, unless you 100% certain know that the program accepts
*'s directly (most don't, including ls)
Note to 3 So if I do
ls -l *.bla
the shell does this:
- it expands "ls" to the full path /usr/bin/ls
- it expands all * and ?, fills in environment variables etc, so *.bla becomes
file1.bla file2.bla file3.bla etc.
- it parses the parameters into separate arguments
- it calls exec. In this example with three *.bla files, ls -l *.bla would
result in the shell calling the exec function like this:
execv('/usr/bin/ls','-l','file1.bla','file2.bla','file3.bla');
So always keep what you write on the commandline, and how you execute in an
Unix program apart. If you don't want that, execute via the shell (the call
is named fpsystem(), shell() is an older 1.x compability call)
More information about the fpc-pascal
mailing list