シェルスクリプトで独自のコマンドラインを使用してプログラムを実行する方法

シェルスクリプトで独自のコマンドラインを使用してプログラムを実行する方法

既存のプログラムでファイルセットを約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確かにテストされていません。

expectDebianシリーズシステムにインストールするには、次の手順を実行します。

apt-get install expect

おすすめ記事