쉘 스크립트에서 자체 명령줄을 사용하여 프로그램을 실행하는 방법

쉘 스크립트에서 자체 명령줄을 사용하여 프로그램을 실행하는 방법

기존 프로그램을 통해 파일 세트를 약 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

관련 정보