将fortran程序输出到变量

时间:2016-10-25 12:00:50

标签: bash variables fortran output

我有一个交互式FORTRAN程序,需要用户提供各种输入。现在,我想将此Fortran程序的输出存储到变量中,并在shell脚本中使用此值。我试过了

 var=`./test` and var=$(./test)

但在这两种情况下,它都不会提示用户输入并保持空闲状态。我该怎么办? 一段示例fortran代码就像这样

  test.f  

  program test
  character*1 resp1, resp3
  integer resp2, ans

  write(*,*) 'Think of a prime number less than 10'
  write(*,*) 'Say whether it is odd or even'
  write(*,*) 'Write o/e'
  read(*,*) resp1
  if ( resp1 .EQ. 'e' ) then
   ans=2
  else
   write(*,*) 'Is the number close to 4 or 8'
   read (*,*) resp2
   if ( resp2 == 8 ) then
    ans=7
   else
    write(*,*) 'Is the number greater than or less than 4'
    write(*,*) 'Write g or l'
    read (*,*) resp3
    if ( resp3 .EQ. 'l' ) then
     ans=3
    else
     ans=5
    end if
   end if
  end if
  write(*,*) ans
  end

  Compiled as gfortran test.f -o test

然后我使用了这样的脚本

 test.sh

 var=`./test`
 echo "The answer you are looking for is " $var

我相信我无法找到一些非常微不足道的东西。请帮我。

P.S。这只是一个示例代码和脚本,我的实际脚本和代码差别很大。

1 个答案:

答案 0 :(得分:3)

Jean-FrançoisFabre是对的。

program test 
character*1 resp1, resp3 
integer resp2, ans 

write(0,*) 'Think of a prime number less than 10' 
write(0,*) 'Say whether it is odd or even' 
write(0,*) 'Write o/e' 
read(5,*) resp1 
if ( resp1 .EQ. 'e' ) then 
 ans=2 
else 
 write(0,*) 'Is the number close to 4 or 8' 
 read (5,*) resp2 
 if ( resp2 == 8 ) then 
  ans=7 
 else 
  write(0,*) 'Is the number greater than or less than 4' 
  write(0,*) 'Write g or l' 
  read (5,*) resp3 
  if ( resp3 .EQ. 'l' ) then 
   ans=3 
  else 
   ans=5 
  end if 
 end if 
end if 
write(6,*) ans 
end 

问题是stderr(0),答案是stdin(5),结果是stdout(6)

var=`./test`

之后工作正常。