[Gambas-user] SHELL not working (GB_DIR)
Doriano Blengino
doriano.blengino at ...1909...
Thu Dec 24 18:30:52 CET 2009
Benoît Minisini ha scritto:
>> Doriano Blengino ha scritto:
>>
>>> Jesus Guardon ha scritto:
>>>
>>>>>
>>>>> SHELL is just an equivalent of EXEC ["sh", "-c", "XXX"] where "XXX" is
>>>>> the string passed to the SHELL command.
>>>>>
>>>>
>>>>>>> jesus at ...2151...:~$ cat /usr/local/bin/dfhlog
>>>>>>> #!/bin/sh
>>>>>>> export PATH=/opt/dfhlog/gambas2/bin
>>>>>>> export GB_DIR=/opt/dfhlog/gambas2
>>>>>>> exec /opt/dfhlog/dfhlog.gambas
>>>>>>>
>>>>>>>
>>>>>>>
>>> Your "export PATH" command imposes a path which excludes standard unix
>>> paths - you will never find system utilities like pidof(1), and neither
>>> the shell itself. You should write:
>>>
>>> export PATH=/opt/dfhlog/gambas2/bin:$PATH
>>>
>>>
>> The right part is that the PATH variable is used by the shell itself, so
>> even if your gambas program finds the shell and asks it to execute
>> something, the shell will fail to do it. Probably this is not considered
>> an error by gambas, so the instruction SHELL "pidof xxx" fails silently.
>>
>> The ambigous part is in whether gambas uses PATH to search for the
>> shell. If it is so, then your gambas program will not find the shell,
>> and gambas should report this, because "an internal instruction of
>> gambas is failing". In this case, however, one can ask himself if makes
>> it sense to use PATH to search for the shell, which traditionally is
>> /bin/sh, and many scripts included system ones address the shell in this
>> way. Assuming that SHELL is a substitute for EXEC ["sh", "-c", "...."],
>> and that EXEC searches executables in PATH, this would explain all.
>> Perhaps would be better to bind SHELL to EXEC ["/bin/sh", "-c", "..."].
>>
>> I am not sure if, natively, exec() searches executables in PATH. May be
>> that there is the system call exec() which does one thing, and the C
>> library wrapped exec() which does differently. In any case, if it is so,
>> this would explain my sensation that SHELLs in gambas are slow. In my
>> system (a normal Debian), the PATH variable looks like
>> "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11"
>> . Every time a gambas program invokes a SHELL, the system searches sh in 4
>> directories, and then sh searches for the executable in 4 directories
>> again; the first four directories could be skipped.
>>
>> Regards,
>>
>>
>
> That's exactly the point: I send "sh" to the system, asking him to search it
> inside the PATH, by using the execvp() glibc function.
>
> I don't remember why I decided to do that. Maybe it is not useful, maybe I can
> use directly "/bin/sh", and let the user use the EXEC instruction if he needs
> something else?
>
>
I think there are a few pros in using /bin/sh directly, and perhaps a
single con.
The pros are: slightly faster; more traditional in the sense that SHELL
should invoke the "normal" system shell (/bin/sh) and not an arbitrary
shell due to a mangled PATH; in a case like this one by Jesus, where we
find a little error in setting PATH, the SHELL statement would work anyway.
The single con, perhaps, is that in a non standard system, with strange
PATH set up, the SHELL could fail. But this could be overcome by using
EXEC instead of SHELL: a user special enough to use a special setup, can
well use EXEC instead of SHELL.
Perhaps a little search in some sources analogue in concept to gambas
(python, awk...) could be explanatory; I would propend for /bin/sh.
Regards and happy Christmas,
--
Doriano Blengino
"Listen twice before you speak.
This is why we have two ears, but only one mouth."
More information about the User
mailing list