[bash] 대화 형 프로그램에 비대화 형으로 인수 전달

read예 / 아니오 옵션과 같이 대화식으로 명령에 대한 인수를 읽는 명령을 사용하는 bash 스크립트가 있습니다. 기본 옵션 값을 인수로 전달하는 비대화 형 스크립트에서이 스크립트를 호출하는 방법이 있습니까?

대화 형 스크립트에 전달해야하는 옵션이 아닙니다.



답변

더 복잡한 작업에는 expect( http://en.wikipedia.org/wiki/Expect )가 있습니다. 기본적으로 사용자를 시뮬레이션하고 특정 프로그램 출력 및 관련 항목에 반응하는 방법을 스크립트로 코딩 할 수 있습니다.

이것은 ssh암호를 파이핑하는 것을 금지하는 경우에도 작동 합니다.


답변

여러 가지 방법

입력 파이프

echo "yes
no
maybe" | your_program

파일에서 리디렉션

your_program < answers.txt

here 문서를 사용 하십시오 (이것은 매우 읽을 수 있습니다)

your_program << ANSWERS
yes
no
maybe
ANSWERS

용도 여기에 문자열을

your_program <<< $'yes\nno\nmaybe\n'


답변

데이터를 파일에 넣고 다음과 같이 리디렉션 할 수 있습니다.

$ cat file.sh
#!/bin/bash

read x
read y
echo $x
echo $y

스크립트 데이터 :

$ cat data.txt
2
3

스크립트 실행 :

$ file.sh < data.txt
2
3


답변

한 가지 더 추가하고 싶습니다. 다른 곳에서 찾았고 아주 간단합니다. “execute_command”명령에 대한 명령 줄의 모든 프롬프트에 대해 yes를 전달하고 싶다고 말하면 간단히 yes를 파이프합니다.

yes | execute_command

모든 예 / 아니오 프롬프트에 대한 대답으로 예를 사용합니다.


답변

printf를 사용하여 입력을 스크립트로 파이프 할 수도 있습니다.

var=val
printf "yes\nno\nmaybe\n$var\n" | ./your_script.sh


답변

anothe ralternative는

echo "something" | tee /path/to/file

tee 명령은 수신 한 입력을 화면에 인쇄하고 동시에 파일에 저장합니다.


답변