무언가를 빌드한 다음 프롬프트를 통해 대화형 셸을 제공하는 명령이 있습니다(예: 다시 시작하려면 R 입력, 종료하려면 Q 입력 등...).
명령을 사용하고 싶지만 프롬프트 섹션에 도달하면 중지합니다. 명령을 호출할 때 "Q" 매개변수를 전달하거나 프롬프트에 도달한 후 이를 종료하는 방법이 있습니까?
답변1
스크립트가 "normal"을 통해 입력을 읽는다면 read
다른 프로그램(예: 파이프를 통해)을 사용하여 미리 입력을 제공할 수 있습니다.echo
printf
echo Q | your-program-here
더 복잡한 예는 다음과 같습니다.
(echo 1; echo thing2; echo yes; echo Q) | your-program-here
더 복잡한 자동 입력 스크립트를 완성하기 위해 유사한 프로그램을 사용하는 것도 가능합니다.예상되는.
답변2
명령이 대화형 입력을 기다리지 않도록 하려면 입력을 어딘가에서 리디렉션하기만 하면 됩니다. 설명하는 것과 같은 대부분의 프로그램은 표준 입력의 끝에 도달하면 종료되므로 프로그램이 초기 작업을 수행하는 것 외에 다른 작업을 수행하지 않으려면 빈 입력을 전달하십시오.
thatcommand </dev/null
실제로 고정 입력을 전달하려면 다음을 사용할 수 있습니다.여기 문서.
thatcommand <<EOF
Q
EOF
여기에서 문서에 변수를 포함할 수도 있습니다. 입력을 보다 동적으로 구성해야 하는 경우 원하는 셸 코드를 파이프할 수 있습니다.
{
# complex shell code goes here
echo Q
} | thatcommand
나는 프로그램이 표준 입력에서 읽는다고 가정합니다. 일부 프로그램은 터미널에서 강제로 읽기 때문에 입력 리디렉션이 작동하지 않습니다. 이런 경우에는 이런 도구가 필요합니다.예상되는. Expect는 이전 출력에 의존하는 프로그램에 입력이 필요한 경우에도 유용합니다.