파이프/파일을 통해 부분 데이터를 보낸 다음 대화형으로 어떻게 보낼 수 있습니까?

파이프/파일을 통해 부분 데이터를 보낸 다음 대화형으로 어떻게 보낼 수 있습니까?

실행하고 싶은 명령이 있습니다. 이를 이라고 부르겠습니다 program. bash 또는 Python REPL과 유사한 대화형 프로그램입니다.

미리 정의된 입력을 사용하여 이 프로그램을 시작하고 싶습니다. 나는 노력했다 program << "some_commands". 하지만 실행이 완료된 후에는 some_commands수동 상호작용을 계속할 수 없습니다.

이 프로그램이 bash라면 나는 .bashrc이 목적으로 그것을 사용할 것이다.

미리 정의된 시작 입력이 있는 프로그램을 사용하는 올바른 방법은 무엇입니까?

답변1

Expect를 사용하지 않고도 이 작업을 수행할 수 있습니다.

{ echo foo ; cat ; } | command

답변2

expect작업을 위한 도구는 다음과 같습니다.

#!/usr/bin/expect -f
spawn program
expect "I'm ready for input"
send "command 1\r"
expect "I'm ready for input"
send "command 2\r"
# ...
send "command last\r"
interact

interact명령은 사용자에게 제어권을 반환합니다.

답변3

당신은 그것을 사용할 수 있습니다되감기프로그램과 상호 작용하십시오. Rlwrap은 bash에서 사용하는 것과 동일한 readline 라이브러리를 기반으로 한 줄 편집기를 제공합니다. 이는 일반적으로 이를 제공하는 프로그램의 줄 편집기만큼 좋지는 않지만(예를 들어 구문 색상 지정이나 완성 기능은 제공되지 않음) 백스페이스 키만 이해하는 기본 터미널 인터페이스보다 훨씬 낫습니다.

rlwrap -P 'some_commands' program

텍스트는 입력 버퍼로 전달되지만 프로그램에는 전달되지 않으므로 Enter프로그램을 시작한 후 키를 눌러야 합니다. 전체 텍스트가 단일 문자열로 전달됩니다. 개행 문자를 포함할 수 있습니다.

관련 정보