2016-09-16 2 views
0

bash 스크립트 명령에 일부 입력을 하드 코딩하고 싶습니다. 예를 들어,이 같은 bash는 스크립트가 있습니다형식이 bash 명령으로 입력 된 문자열

#! /bin/bash 
apt-get install python 

을 언젠가 사용자가 공간을 확인하는 메시지가 B 하듯이 나는 하드 코드 y이 bash는 스크립트에서 apt-get 명령의 입력으로 enter 싶습니다 설치의. 나는이 줄 바꿈처럼 '\ n'을이 방법을 사용하여, 입력 특수한 형식도 있습니다 내가 문자열 입력 y을 통과

apt-get install python <<< 'y' 

을 수행 할 수 있습니다 알고 있지만? 감사!

+0

일반적으로 스크립팅 시뮬레이션 된 최종 사용자 입력은 매우 약합니다. 프로그램은 (매번 똑같은 일을 맹목적으로하는 스크립트가 아닌) 지시를 읽고 따르는 사람이 제공하는 입력을 갖기 위해 설계 되었기 때문에 일반적으로 필요한 입력이 변경되는 것을 방지하는 호환성 제약이 취해지지 않습니다 릴리스간에 또는 런타임에 관찰 된 조건에 따라 임의의 방식으로 수행됩니다. –

+0

... 대조적으로 구성을 지정하기 위해 프로그래밍 인터페이스를 찾아 사용할 수있는 경우 이러한 인터페이스는 전달 호환성을 보장받을 가능성이 훨씬 큽니다. –

+0

@CharlesDuffy, 귀하의 제안에 감사드립니다. 매우 유용합니다! –

답변

2

모든 문자열은 자동으로 줄 바꿈으로 끝나기 때문에 원하는대로 할 수 없습니다. (많은 프로그램은 입력이 TTY에서 오는지 여부를 확인하고 결과에 따라 프롬프트를 표시할지 여부와 방법을 변경하고 다른 사용자는 사용자로부터 오는 프롬프트를 읽습니다. TTY에서 직접으로 보내 지므로 파이프 된 내용, 그리고 herestrings 완전히). 당신은 또한 히어 닥을 사용할 수 있습니다

apt-get install python <<<$'y\n' 

:

는 질문에 리터럴 대답을했다 그 apt-get, 돈의 특정 경우에 말했다

apt-get install python <<EOF 
y 

EOF 

그럴 수 없어!

apt-get install -y python 

... 실제로 가장 좋은 방법입니다. 일반적으로 시스템 관리 명령의 경우 일괄 처리 또는 자동화 된 사용은 일반적으로 개발자가 예상하므로 최종 사용자 입력이 거의 필요하지 않습니다. 각 프로그램의 설명서에서 --batch, --force, --always 또는 --yes과 같은 인수를 찾아보고, 그렇지 않으면 메시지가 표시 될 항목을 지정하거나 표준 입력이 TTY가 아니 어서 활성화 된 동작).

2

apt-get -y install python은 올바른 방법입니다. 맨 페이지에 따르면

-y, - 네, --assume - 예
자동 예 프롬프트에; 모든 프롬프트에 대한 응답으로 "예"라고 가정하고 비 대화식으로 실행하십시오. 보관 된 패키지를 변경하거나 인증되지 않은 패키지를 설치하려고하거나 필수 패키지를 제거하는 등의 바람직하지 않은 상황이 발생하면 apt-get이 중단됩니다. 구성 항목 : APT :: Get :: Assume - 예.

+0

나는 apt-get이 단지 스탠드 인 예제이고 OP는 "bash 명령"으로 작업하기에 충분히 일반적인 것을 원한다고 가정하고있다. 그것이 그들의 질문의 대상이 합법적이라면, 이것은 절대적으로 올바른 것입니다. –

+0

그래, 나는 정말로 그 질문에 대답하지 않았다는 것에 동의한다. 대신 나는 XY 문제로 다루었습니다. – paddy

관련 문제