2016-10-15 81 views
0

基本上我運行Gaussian09 freqchk效用,我需要編寫一個bash腳本來與終端相互作用,並且我這裏一個變量(溫度),$i,當我執行在終端腳本,我的用戶的說法似乎並不爲莫名其妙的原因被識別,而終端只是掛起了我的用戶參數。使用bash腳本與終端輸入請求交互

#!/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 

我檢查了殼牌檢查,它不會產生任何錯誤的反饋。我把答案從Have bash script answer interactive prompts 這就是爲什麼我使用echo,但它似乎並沒有在所有的工作。非常感謝,如果有人可以提供一些提示?

回答

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 

雖然我打字這個答案,我認爲問題來自缺乏瞭解重定向的輸入和輸出工作。

+0

第一個答案很簡單,它的效果很好。第二個答案更容易理解,但是,當我跑過終端時,似乎有幾個命令沒有被觸發,可能每個交互之間的等待時間間隔應該被考慮?但是,無論如何,答案是可行的,謝謝堆! –

+0

你說得對,我從來沒有做過任何編程,我開始學習bash腳本,FORTRAN 90/95和數學大約一個月前,由於我的新的研究項目,我真的沒有時間去得當,學習語言我學習的方式是處理越來越多的案例。 –