Exec with many params

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Exec with many params

Antal
> > in linux I can't use the exec for executing a program with more than one
> > parameter.
> > I tried to supply more than a parameter separeted with whitespace, but
> > it's not reliable, since the program is treating it as just one parameter
> >
> > so I can't pass options to programs, such as:
> > ls -l .*
>
> Expansion of the * is done by the shell not by the exec system call. Use
> the shell() command from the unix unit instead.
I'm not asking about a shell related problem, but about passing more than
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

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Exec with many params

Florian Klämpfl
Antal wrote:

>>>in linux I can't use the exec for executing a program with more than one
>>>parameter.
>>>I tried to supply more than a parameter separeted with whitespace, but
>>>it's not reliable, since the program is treating it as just one parameter
>>>
>>>so I can't pass options to programs, such as:
>>>ls -l .*
>>
>>Expansion of the * is done by the shell not by the exec system call. Use
>>the shell() command from the unix unit instead.
>
> I'm not asking about a shell related problem, but about passing more than
> 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

The compiler uses executeprocess heavily and it works fine. Please provide a
complete example which doesn't work.

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: Exec with many params

Marco van de Voort
In reply to this post by Antal
> 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)




_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal