C Shell:如何使用非命令行参数执行程序?

时间:2008-10-22 00:14:04

标签: shell unix scripting csh

我的$ SHELL是tcsh。我想运行一个c shell脚本,它会多次调用一个程序,每次更改一些参数。我需要调用的程序是在Fortran中。我不想编辑它。程序只有在执行后才会获取参数,但不会在命令行中获取。在脚本中调用程序后,程序将获得控制权(这是我当前卡住的地方,我永远无法离开,因为脚本在程序进程停止之前不会执行任何操作);此时我需要传递一些变量,然后经过几次迭代后我需要从程序中按ctrl-c继续编写脚本。

如何做到这一点?

6 个答案:

答案 0 :(得分:5)

要添加@Toybuilder所说的内容,您可以使用“此处文档”。即你的脚本可以有

./myfortranprogram << EOF
first line of input
second line of input
EOF

<<EOF”和“EOF”之间的所有内容都将被输入到程序的标准输入中(Fortran是否还使用“read(5,*)”来读取标准输入?)

因为我认为@ ephemient的评论值得回答:

  

更多提示:&lt;&lt;'EOF'阻止   在here-doc体中插值;   &lt;&lt; -EOF删除所有前导标签(所以   你可以缩进here-doc来匹配   它的周围环境)和EOF可以   被任何令牌取代。一个空令牌   (&lt;&lt;“”)表示停止的here-doc   在第一个空行。

我不确定那些是多么可移植,或者它们只是tcsh扩展 - 我自己只使用<<EOF类型“here here”。

答案 1 :(得分:2)

您要使用的是Expect

答案 2 :(得分:1)

嗯,你能用重定向来提供你的Fortran代码吗?您可以使用输入创建临时文件,然后使用stdin重定向(&lt;)将其传入。

答案 3 :(得分:0)

不是tcsh用户,但如果程序运行,则通过stdin读取命令,然后您可以使用shell重定向<为其提供所需的命令。如果您在后台使用&运行它,则在执行时不会阻止。然后你可以sleep一点,然后使用你拥有的任何工具(psgrepawk等)来发现程序的PID,然后使用{{1发送它kill,这与执行ctrl-c相同。

答案 4 :(得分:0)

这是unix程序期望的工作,它可以很好地,轻松地交互式地命令程序并响应它们的提示。

答案 5 :(得分:0)

在被告知我的问题接近这个问题后,我被送到了这里。

FWIW,我遇到了类似csh C shell脚本的问题。

这段代码允许执行custom_command而不获取任何输入参数:

foreach f ($forecastTimes)
    custom_command << EOF
        arg1=x$f;2
        arg2=ya
        arg3=z,z$f
        run
        exit
        EOF
end

第一次尝试它时它没有工作,但在我退出代码段的所有空格后,我删除了“&lt;&lt;”之间的空格。和“EOF”。我还将关闭的“EOF”一直退回到左边距。之后它起作用了:

foreach f ($forecastTimes)
    custom_command <<EOF
        arg1=x$f;2
        arg2=ya
        arg3=z,z$f
        run
        exit
EOF
end