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