[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