使用bash脚本与终端输入请求进行交互

时间:2016-10-15 03:39:28

标签: bash

基本上我运行Gaussian09 freqchk实用程序,我需要编写一个bash脚本来与终端进行交互,我在这里有一个变量(温度)$i,当我在终端执行脚本时,我的用户参数似乎不会因为某种原因而被识别,并且终端正在等待我的用户参数。

#!/bin/bash
for i in {77..900}
do

freqchk methane.chk > $i
#Write Hyperchem file?
echo "N"
#Temperature (K)?
echo "$i"
#Pressure (Atm)
echo "0"
#Scale factor for frequencies during thermochemistry?
echo "1.0"
#Do you want to use the principal isotope masses?
echo "Y"
#Project out gradient direction?
echo "Y"

done

我已经与ShellCheck核对过,它没有产生任何错误反馈。我从Have bash script answer interactive prompts得到答案 这就是我使用echo的原因,但它似乎根本不起作用。如果有人能提供一些暗示,我们非常感激吗?

1 个答案:

答案 0 :(得分:0)

freqchk命令的完整语法是:

freqchk checkpoint-file [options] [answers to prompts]

因此,在这种情况下,脚本可以是:

#!/bin/bash
for i in {77..900} ; do
    freqchk methane.chk N "$i" "0" "1.0" Y Y > $i
done

这使得一切都排成一行。比您的评论版本更不易阅读。如果你真的想要你的评论可以尝试类似:

#!/bin/bash
for i in {77..900}
do

grep -v '#' <<EOF | freqchk methane.chk > $i
#Write Hyperchem file?
N
#Temperature (K)?
$i
#Pressure (Atm)
0
#Scale factor for frequencies during thermochemistry?
1.0
#Do you want to use the principal isotope masses?
Y
#Project out gradient direction?
Y
EOF
done

当我输入这个答案时,我认为问题来自于缺乏理解输入和输出重定向的工作原理。