EXECUTE_COMMAND_LINE (The GNU Fortran Compiler)

### 8.106 `EXECUTE_COMMAND_LINE` — Execute a shell command ¶

Synopsis:

  `CALL EXECUTE_COMMAND_LINE(COMMAND [, WAIT, EXITSTAT, CMDSTAT, CMDMSG ])`

Description:

  `EXECUTE_COMMAND_LINE` runs a shell command, synchronously or asynchronously.

  The `COMMAND` argument is passed to the shell and executed (The shell is `sh` on Unix systems, and `cmd.exe` on Windows.). If `WAIT` is present and has the value false, the execution of the command is asynchronous if the system supports it; otherwise, the command is executed synchronously using the C library’s `system` call.

  The three last arguments allow the user to get status information. After synchronous execution, `EXITSTAT` contains the integer exit code of the command, as returned by `system`. `CMDSTAT` is set to zero if the command line was executed (whatever its exit status was). `CMDMSG` is assigned an error message if an error has occurred.

  Note that the `system` function need not be thread-safe. It is the responsibility of the user to ensure that `system` is not called concurrently.

  For asynchronous execution on supported targets, the POSIX `posix_spawn` or `fork` functions are used. Also, a signal handler for the `SIGCHLD` signal is installed.

Class:

  Subroutine

Arguments:

  COMMAND | Shall be a default `CHARACTER` scalar.
  WAIT | (Optional) Shall be a default `LOGICAL` scalar.
  EXITSTAT | (Optional) Shall be an `INTEGER` of the default kind.
  CMDSTAT | (Optional) Shall be an `INTEGER` of the default kind.
  CMDMSG | (Optional) Shall be an `CHARACTER` scalar of the default kind.

Example:

      program test_exec
        integer :: i

        call execute_command_line ("external_prog.exe", exitstat=i)
        print *, "Exit status of external_prog.exe was ", i

        call execute_command_line ("reindex_files.exe", wait=.false.)
        print *, "Now reindexing files in the background"

      end program test_exec

Notes:

  Because this intrinsic is implemented in terms of the `system` function call, its behavior with respect to signaling is processor dependent. In particular, on POSIX-compliant systems, the `SIGINT` and `SIGQUIT` signals are ignored, and `SIGCHLD` is blocked. As such, if the parent process is terminated, the child process might not be terminated alongside.

Standard:

  Fortran 2008 and later

See also:

  `SYSTEM` — Execute a shell command