2016-06-07 2 views
0

프로그래밍 방식으로 일부 repl (예 : mongo)을 입력하고 프로그래밍 방식으로 상호 작용할 수 있습니까?프로그래밍 방식으로 Bash의 대화 형 REPL에 명령을 보내시겠습니까?

$ mongo 
MongoDB shell version: 2.4.8 
connecting to: test 
> db.collections 
test.collections 
> exit 
bye 

않는 모든은 다음과 같습니다 : 즉, 프로그램이 작업을 수행 할 수있는 말을하는 것입니다 mongo 명령을 사용하여 REPL에

  1. 로그인합니다. 어떻게 든이 작업을 수행 할 수 있음을 알고 있습니다. 나는 create interactive REPL's in the Node.js world을 완료 한 것으로 보았습니다. bash에서 직접이 작업을 수행하는 방법을 아는 것이 도움이됩니다.
  2. 일단 로그인하면 db.collections을 입력하고 REPL을 탐색합니다. 이 질문은 묻습니다. 프로그래밍 방식으로 할 수 있습니까? 마찬가지로 (a) bash 스크립트에서 자식 프로세스/REPL을 만든 다음 (b) 평가할이 db.collections과 같은 임의의 메시지를 보낼 수 있습니다. (그리고 당신은 응답/출력을 되 찾을 수 있습니다).
  3. 프로그래밍 방식으로 REPL에서 로그 아웃합니다.

이것이 가능합니까?

+2

"Here-Docs"('<< EOS .... cmds ... EOS'로 구분됨)를 사용하여 Q를 검색하십시오 (Unfotunately,'EOS'는 임의의 문자열이 될 수 있으므로'<< _ '또는'<< EOD' 또는 << ...'(수십 가지). "Here-Documents"에 초점을 맞추고 '몽고'에서 읽을 수 있는지 알아보기 위해 작은 테스트를해라. '. 행운을 빌어 요. – shellter

+0

쉘터로서 말하길, [here document] (http://mywiki.wooledge.org/HereDocument)를 사용하십시오. (일부 명령은 리디렉션 된'stdin'을 허용하지 않습니다) 'expect'] (http://www.unix.com/man-page/all/1/expect/) 기반 솔루션. – anishsane

+0

감사합니다. –

답변

1

대화 형으로 명령을 입력하는 expect 스크립트를 작성할 수 있습니다. 나는 사용자가 정기적으로하지 기대하는거야하지만 난 그게 다음과 비슷한 모습이 될 것입니다 생각 : 쉽게 최소한의 작업 예제를 만들 수 있도록해야 거기에 많은 예제가 있습니다

#!/usr/bin/expect 
mongo 
set timeout 10 
expect "MongoDB shell version: 2.4.8" 
send "db.collections" 
expect "test.collections" 
send exit 

.