如何执行bash命令" export"在Fortran计划中?

时间:2017-10-04 12:18:54

标签: fortran intel-fortran

我想在Fortran程序中执行命令export $VAR=3。不幸的是,子程序system无法做到。你能帮我解决一下如何执行VAR的初始化吗?我正在使用ifort版本11.1。

2 个答案:

答案 0 :(得分:2)

一种可能的解决方案是使用Fortran的C例程和iso_c_binding内在模块。通过C,您可以设置环境变量,然后Fortran程序启动的任何程序都可以访问这些变量。这适用于大多数平台和编译器。

C例程

#include <stdio.h>
#include <stdlib.h>     /* putenv, getenv */

void c_setgetenv ()
{
    char* p;
    putenv("x=100");
    p = getenv("x");
    if (p!=NULL)
        printf (" The variable is: %s\n",p);
}

Fortran计划

program main
    use, intrinsic :: iso_c_binding
    implicit none

    ! The interface for the C routine
    interface
        subroutine c_setgetenv () bind(c)
            import ! use declarations from host (implicit none, iso_c_binding)
        end subroutine c_setgetenv
    end interface

    character(len=20) :: val

    !! begin
    call c_setgetenv()
    call get_environment_variable(name="x",value=val)
    print *, "Fortran: ", val
end program main

在这个例子中,我还没有将任何args从Fortran传递给C例程,但是如果需要,你可以自定义和处理它。请注意,您需要编译C链接代码并将其链接到Fortran程序。

答案 1 :(得分:0)

在英特尔Fortran中,您可以使用非标准扩展SETNVQQ或调用相应的操作系统函数(Win API或POSIX)。

没有Fortran标准方式。

它只会影响当前进程和子进程。

  character(20) :: val

  call setenvqq("x=5")
  call get_environment_variable(name="x",value=val)
  print *, val
  call execute_command_line("echo $x")
end

> ifort setenvqq.f90 
> ./a.out 
 5                   
5