programing

bash 스크립트가 대화형 프롬프트에 응답하도록 설정

codeshow 2023. 4. 17. 22:11
반응형

bash 스크립트가 대화형 프롬프트에 응답하도록 설정

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

단순.

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

이를 통해 스크립트에 Y 또는 N의 시퀀스를 전달할 수 있습니다.

이것은 「자동 완성」이 아니고, 자동화입니다.이러한 작업을 위한 일반적인 도구 중 하나는 Expect입니다.

또한 파이프 입력만으로 문제를 해결할 수 있습니다.yes.

송신할 Y만이 있는 경우:

$> yes Y |./your_script

송신하는 것이 N 뿐인 경우:

$> yes N |./your_script

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

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

내 상황에서는 Y나 N 없이 텍스트나 공백으로 몇 가지 질문에 대답해야 했습니다.이 작업을 수행하는 가장 좋은 방법은 셸스크립트 파일을 만드는 것이었습니다.제 경우엔 자동 완성이라고 불렀습니다.

교리 스키마 익스포터를 위해 몇 가지 질문에 답해야 했기 때문에 파일은 이렇게 되어 있었습니다.

--이것은 예에 지나지 않습니다--

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 [answer] |./your_script

또는 각 질문에 대한 구체적인 답변이 있는 스크립트에 삽입할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/3804577/have-bash-script-answer-interactive-prompts

반응형