[Bug fortran/59484] execute_command_line doesn't play with environment variables
sgk at troutmask dot apl.washington.edu
gcc-bugzilla@gcc.gnu.org
Thu Dec 12 17:17:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59484
--- Comment #2 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Thu, Dec 12, 2013 at 02:27:19PM +0000, kargl at gcc dot gnu.org wrote:
> --- Comment #1 from kargl at gcc dot gnu.org ---
> (In reply to Reinhold Straub from comment #0)
> > Please compile:
> >
> > program test
> > implicit none
> >
> > character(len=11) :: cmdmsg,str
> > integer :: exitstat,cmdstat,status,length
> > logical :: wait
> > wait = .true.
> > cmdmsg = "ok"
> >
> > call execute_command_line("export newvar='some text'")
> > print *,"result 1:", exitstat, cmdstat, cmdmsg
> > call get_environment_variable("newvar",str,length,status)
> > print *,"1: ",str,length,status
> > print *,"expected:","some text",9,0; print *,""
> >
>
> Looks like an invalid program to me. exitstat, cmdstat, and cmdmsg
> are undefined in the 1st print statement.
Actually, cmdmsg is defined. exitstat and cmdstat are not defined.
> execute_command_line(command) executes the 'command' in a child
> process. You've managed to export newvar in the child's environment.
> By the time you use get_environment_variable, the child process has
> completed and more importantly it has not changed its parent
> environment.
>
> If you want to change the parent's environment, you'll most likely
> need to use ISO C interop and the setenv function from the C lib.
If you want to change the environment of the parent you can do
program foo
use iso_c_binding
implicit none
integer status
character(len=20) var
interface
function putenv(str) bind(c,name="putenv")
use iso_c_binding
integer(c_int) putenv
character(len=1,kind=c_char) str
end function putenv
end interface
status = putenv('OHMY=Farmer tan' // C_NULL_CHAR)
print '(A,I0)', 'status = ', status
call get_environment_variable('OHMY', var)
print '(A)', trim(var)
end program foo
gfortran -o z foo.f90
./z
status = 0
Farmer tan
More information about the Gcc-bugs
mailing list