파이프를 통해 표준 입력을 보내는 방법

파이프를 통해 표준 입력을 보내는 방법

프로그램이 시작된 직후에 표준 입력이나 키코드를 보내야 합니다.

예를 들어

$ program | F3

답변1

다음을 정의해야 합니다.시작하다거기.

F3터미널 장치 입력 버퍼를 누르면 터미널에서 보낸 문자 시퀀스를 삽입할 수 있습니다.~ 전에Linux와 같은 일부 시스템에서는 TIOCSTI ioctl()을 사용하여 프로그램을 실행합니다.

{
   perl -le 'require "sys/ioctl.ph";
   ioctl(STDIN, &TIOCSTI, $_) for split "","@ARGV"' "$(tput kf3)"
   program
}

expect또는 가짜 터미널 계층에서 프로그램을 실행하고 프롬프트(또는 그것이라는 표시)가 출력될 때까지 기다리는 것과 같은 것을 사용할 수 있습니다.시작했다예상하는 지점까지) 그런 다음 해당 출력을 보냅니다.

expect -c 'spawn -noecho program; expect {>} {send [exec tput kf3]}; interact'

(여기서 프롬프트가 예상되면 입력을 읽을 준비가 되었을 때 출력되는 >일부 문자열로 바꾸십시오 ).program

stdin을 파이프로 대체할 수도 있지만 해당 응용 프로그램이 F3키 누르기와 같은 것을 기대한다면 대화형 응용 프로그램일 가능성이 높으므로 stdin이 터미널이 아닐 때는 마음에 들지 않을 것입니다. 어쨌든 언제든지 시도해 볼 수 있습니다.

tput kf3 | program

program그러나 의 출력을 읽은 후에 tput는 파일 끝(더 이상 읽을 내용 없음)이 표시되어 종료될 수 있습니다. 와 함께:

{ tput kf3; cat; } | program

의 출력을 보낸 kf3다음 cat터미널에 입력한 모든 내용을 으로 전달하는 데 사용합니다 program. 그런 다음 다시 program입력하자마자 입력이 전송되는 모드로 터미널을 설정하고 echo입력이 터미널이 아니기 때문에 더 이상 수행할 수 없는 기능을 비활성화 하므로 작동하지 않을 것입니다 .

다음과 같이 동일한 설정을 직접 수행할 수 있습니다.

saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"

관련 정보