既存のプログラムでファイルセットを約1000回程度自動的に実行するには、シェルスクリプトを作成する必要があります。実行したいプログラムは、以下のようにコマンドラインを介してアクセスされます。次に、次のように「ファイル形式のファイル名をロード」と入力して、プログラムで使用するファイルをロードできます。
server>./fbat
*******************************************************
* *
* ********* * * * * ********* *
* * * * * * * *
* ******* * * * * * * *
* * * * * *** * * *
* * * * * * * *
* * * * * * * * *
* *
* Xin Xu C1999-2009 v2.0.4Q *
* Program for Population Genetics *
* Harvard School of Public Health *
* *
*******************************************************
>>load map leprmap.txt
read in 899 markers' info
>>load ped leprped.txt
read in: 899 markers from 16 pedigrees (338 nuclear families,1182 persons)
>>load phe phe_dbpsim2e1.txt
1 quantitative traits have been successfully read
719 persons have been phenotyped
>>trait resid
affection resid**
>>fbat -v1 -e
(...ここに多くの出力があります)
実行するたびに変更されるファイルは、phe_dbpsim2e1.txt
実行されるたびにファイル名が数字だけ増加することです。スクリプトからプログラムを実行できますが、一度プログラムが開かれると、スクリプトを介して入力しようとしているコマンド(ロードなど)が認識されず、プログラムが手動でコマンドを入力するのを待ちます。プログラムを終了すると、スクリプト内のすべてのコマンドが画面に表示され、プログラムが開いている間に作成したスクリプトが一時停止したように見えます。
プログラムを開いて手動で入力しなくてもコマンドを入力する方法はありますか?
答え1
fbat
端末から入力を受け取り、自動化したい場合は、解決策は次のものを使用することです。expect
(またはpexpect
)。以下は、expect
プログラムを自動化できるサンプルスクリプトです。
#!/usr/bin/expect -f
spawn ./fbat
expect ">>"
send "load map leprmap.txt\r"
expect ">>"
send "load phe phe_dbpsim2e1.txt\r"
expect ">>"
send "trait resid\r"
上記はアクセス権がないためfbat
確かにテストされていません。
expect
Debianシリーズシステムにインストールするには、次の手順を実行します。
apt-get install expect