[linux] bash 스크립트가 대화 형 프롬프트에 응답하도록 함 [중복]

bash 스크립트가 일반적으로 기본 작업으로 사용자에게 표시되는 프롬프트를 자동으로 처리하도록 할 수 있습니까? 현재 bash 스크립트를 사용하여 사용자에게 작업을 완료하라는 메시지 (Y / N 프롬프트)를 표시하는 사내 도구를 호출하고 있지만 작성중인 스크립트는 완전히 “핸드 오프”여야합니다. Y|N프로그램이 계속 실행될 수 있도록 프롬프트 로 보낼 방법이 필요합니다 . 이게 가능해?



답변

이것은 “자동 완성”이 아니라 자동화입니다. 이를위한 일반적인 도구 중 하나는 Expect 입니다.

에서 파이프 입력만으로 벗어날 수도 있습니다 yes.


답변

간단한

echo "Y Y N N Y N Y Y N" | ./your_script

이렇게하면 “Y”또는 “N”시퀀스를 스크립트에 전달할 수 있습니다.


답변

입력을 보내는 가장 좋은 방법은 cat과 텍스트 파일을 사용하여 필요한 입력을 전달하는 것입니다.

cat "input.txt" | ./Script.sh


답변

보낼 Y 만있는 경우 :

$> yes Y |./your_script

보낼 N 개만있는 경우 :

$> yes N |./your_script


답변

내 상황에서는 Y 또는 N없이 텍스트 또는 공백으로 몇 가지 질문에 답해야했습니다. 내 상황에서이 작업을 수행하는 가장 좋은 방법은 쉘 스크립트 파일을 만드는 것입니다. 제 경우에는 autocomplete.sh라고 불렀습니다.

교리 스키마 내보내기에 대한 몇 가지 질문에 답해야했기 때문에 파일이 다음과 같이 보입니다.

이것은 예시 일뿐입니다

php vendor/bin/mysql-workbench-schema-export mysqlworkbenchfile.mwb ./doctrine << EOF
`#Export to Doctrine Annotation Format`                                     1
`#Would you like to change the setup configuration before exporting`        y
`#Log to console`                                                           y
`#Log file`                                                                 testing.log
`#Filename [%entity%.%extension%]`
`#Indentation [4]`
`#Use tabs [no]`
`#Eol delimeter (win, unix) [win]`
`#Backup existing file [yes]`
`#Add generator info as comment [yes]`
`#Skip plural name checking [no]`
`#Use logged storage [no]`
`#Sort tables and views [yes]`
`#Export only table categorized []`
`#Enhance many to many detection [yes]`
`#Skip many to many tables [yes]`
`#Bundle namespace []`
`#Entity namespace []`
`#Repository namespace []`
`#Use automatic repository [yes]`
`#Skip column with relation [no]`
`#Related var name format [%name%%related%]`
`#Nullable attribute (auto, always) [auto]`
`#Generated value strategy (auto, identity, sequence, table, none) [auto]`
`#Default cascade (persist, remove, detach, merge, all, refresh, ) [no]`
`#Use annotation prefix [ORM\]`
`#Skip getter and setter [no]`
`#Generate entity serialization [yes]`
`#Generate extendable entity [no]`                                          y
`#Quote identifier strategy (auto, always, none) [auto]`
`#Extends class []`
`#Property typehint [no]`
EOF

이 전략에 대해 내가 좋아하는 점은 답변이 무엇인지 주석을 달 수 있고 EOF를 사용하여 빈 줄을 사용할 수 있다는 것입니다 (기본 답변). 이 내보내기 도구에는 이러한 질문에 답하기위한 자체 JSON 대응 도구가 있지만이 작업을 수행 한 후에 알아 냈습니다 =).

스크립트를 실행하려면 원하는 디렉토리에 'sh autocomplete.sh'있고 터미널에서 실행하면 됩니다.

간단히 말해서 리턴 라인과 함께 << EOL & EOF 사용 하면 필요에 따라 프롬프트의 각 질문에 답할 수 있습니다. 각각의 새로운 줄은 새로운 답입니다.

내 예제는`문자를 사용하여 주석으로 어떻게 수행 할 수 있는지 보여 주므로 각 단계가 무엇인지 기억할 수 있습니다.

이 방법의 다른 장점은 Y 또는 N 이상으로 대답 할 수 있다는 것입니다. 사실 공백으로 대답 할 수 있습니다!

이것이 누군가를 도울 수 있기를 바랍니다.


답변

이를위한 특별한 내장 유틸리티가 있습니다- ‘ yes ‘.

같은 답으로 모든 질문에 답하려면 다음을 실행할 수 있습니다.

yes [answer] |./your_script

또는 스크립트 안에 각 질문에 대한 구체적인 답변을 넣을 수 있습니다.


답변