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

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

프로그램이 시작되자마자 표준 입력이나 키코드를 보내야 합니다.

예를 들어

$ 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

표준 입력을 파이프로 바꿀 수도 있지만 앱에 F3키 입력 등이 필요한 경우 대화형 앱일 가능성이 높으므로 표준 입력이 터미널이 아닌 경우 마음에 들지 않을 수 있습니다. 어쨌든, 언제든지 다음을 시도해 볼 수 있습니다.

tput kf3 | program

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

{ tput kf3; cat; } | program

그런 다음 우리가 보내는 출력은 터미널에 입력하는 모든 내용을 에 전달하는 kf3데 사용됩니다 . 그런 다음 입력이 터미널이 아니기 때문에 터미널을 입력하고 비활성화하자마자 터미널을 더 이상 아무것도 할 수 없는 모드로 전환할 가능성이 높기 때문에 작동하지 않을 것입니다 .catprogramprogramecho

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

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

관련 정보