EXECUTE_COMMAND_LINE(COMMAND, WAIT, EXITSTAT, CMDSTAT, CMDMSG) (Fortran 2008)

用途

将命令传递到操作系统以执行。

子例程

参数类型和属性

COMMAND
INTENT(IN) CHARACTER 标量。 它指定要执行的命令行。
WAIT (可选)
INTENT(IN) LOGICAL 标量。 它确定 COMMAND 是同步执行还是异步执行。
  • 如果 WAIT 设置为 .TRUE。 COMMAND 以同步方式执行。
  • 如果 WAIT 设置为 .FALSE. , 如果支持 COMMAND ,那么将以异步方式执行,否则以同步方式执行。
  • 如果 WAIT 不存在,那么 IBM® Open XL Fortran 会将其视为具有值 .TRUE 的存在。 然后以同步方式执行 COMMAND
注: 在当前发行版中, IBM Open XL Fortran 仅支持同步执行。
EXITSTAT (可选)
INTENT(OUT) INTEGER 标量。 如果 IBM Open XL Fortran 以同步方式执行 COMMAND ,那么当此参数存在时,将向 EXITSTAT 分配已执行命令返回的系统返回码的值。 否则, EXITSTAT 将保持不变。
CMDSTAT (可选)
INTENT(OUT) INTEGER 标量。 如果存在 CMDSTAT ,那么会为其分配一个值,指示命令执行的状态,如下所示:
  • 如果不支持命令行执行,则 CMDSTAT 的值被设置为 -1。
  • 如果在执行 COMMAND期间未发生错误,并且 WAIT 的值为 .FALSE. , 但异步执行不受支持,因此 CMDSTAT 被分配了 -2 的值。
  • 如果发生错误,那么将为 CMDSTAT 分配值 1。
  • 在所有其他情况下,将为 CMDSTAT 分配 0 的值。
注: 如果发生将非零值指定给 CMDSTAT的条件,但 CMDSTAT 自变量不存在,那么将启动错误终止。
CMDMSG (可选)
INTENT(OUT) CHARACTER 标量。 如果在执行 COMMAND期间发生错误,那么当存在此参数时,将向 CMDMSG 分配说明消息的值。 否则, CMDMSG 将保持不变。

示例

CALL EXECUTE_COMMAND_LINE('rm -rf script')
OPEN(1, FILE = 'script')
CALL EXECUTE_COMMAND_LINE('date | awk \'{printf \" %s \", $1}\' >> script.out')
! Execute the 'cmd' command synchronously 
CHARACTER(LEN = 10) :: cmd = "du -s -m"
CALL EXECUTE_COMMAND_LINE(cmd, .TRUE.)
! Assign 'exit' the value of the system return code 
INTEGER :: exit = 0
CALL EXECUTE_COMMAND_LINE('/bin/mv mod1.mod mod2.mod', .TRUE., EXIT)
! Assign 'exit' the value of the system return code
! Assign 'cmdstat' the value of the status of the command execution
INTEGER :: exit, cmdstat = 0
CALL EXECUTE_COMMAND_LINE('echo running on = \'hostname\'', .TRUE., exit, cmdstat)
! If an error occurs, 'message' is assigned the value of 
! an explanatory message.

IMPLICIT NONE

CHARACTER(200) :: message = ""
INTEGER :: exit_s = 0, cmd_s = 0

CALL EXECUTE_COMMAND_LINE("mv f.1 f.2", EXITSTAT = exit_s, 
                           CMDSTAT = cmd_s, CMDMSG = message)

IF (cmd_s .NE. 0) THEN
  IF (cmd_s .EQ. -1) THEN
    PRINT *, "command execution not supported on this system"
    STOP 1
  END IF

  PRINT *, message
  STOP 2
END IF

IF (exit_s .NE. 0) THEN
  STOP 3
END IF

END

相关信息

SYSTEM(CMD, RESULT)(IBM 扩展)

有关底层实现的详细信息,请参阅 AIX Technical Reference: Base Operating System and Extensions Volume 2 中的 system 子例程。