bash 스크립트에서 ENTER 키 누르기 시뮬레이션


97

몇 가지 명령을 실행하는 정말 간단한 bash 스크립트를 만들었습니다. 이러한 명령 중 하나는 런타임 중에 사용자 입력이 필요합니다. 즉, 사용자에게 "당신이 blah blah blah?"라고 묻는다면, 스크립트가 완전히 자동화되도록 엔터 키를 누르기 만하면됩니다.

런타임 동안 입력이나 다른 것을 기다릴 필요가 없습니다. 키 누르기 만 보내기 만하면 입력 버퍼가 나머지를 처리합니다.


1
자동화하려는 도구가 apt-get인 경우 적절한 해결책은 선호하는 값으로 debconf 데이터베이스를 미리 시드하는 것입니다. 그러면 묻지 않을 것입니다.
tripleee 2015 년

echo 대신 printf를 사용할 수 있습니다. printf "hello \ n"
hassanzadeh.sd

답변:


133
echo -ne '\n' | <yourfinecommandhere>

또는 에코가 생성하는 암시 적 개행 문자를 활용합니다 (Marcin에게 감사드립니다).

echo | <yourfinecommandhere>

이제 간단히 --sk옵션을 사용할 수 있습니다.

--sk, --skip-keypress각 테스트 후 키 누르기를 기다리지 마십시오.

sudo rkhunter --sk --checkall


1
이 출력을 제공 xxd하면 5c6e리터럴 인 16 진수 를 얻습니다 \n. 그렇게 echo | xxd 하면 실제로 16 진수로 끝납니다 0a. 그래서 나는 당신의 프로그램에 필요한 것을 사용한다고 생각합니다.
Marcin

3
@Marcin, 나는 놀랐습니다, 나는 0a0a여전히 의도 한 바가 아닌 것을 얻습니다 -n. 암시 적 개행을 추가합니다 . 그러나 당신은 물론 옳 echo | ...습니다. 내 대답을 업데이트합니다.
Tilman Vogel 2011 년

흠, 나에게 옳지 않은 것 같아서 xxd를 통해 먹여야했다. 어떤 명령이 출력되는지 정확히 확인하는 가장 간단하면서도 효율적인 방법입니다. 어리석은 유닉스 트릭을 좋아해야합니다.
Marcin

@Marcin, 그래도 왜 당신은 얻 5c6e습니까? -e또는 셸 을 생략 했습니까? 아니면 echo해당 옵션을 처리하지 않습니까?
Tilman Vogel 2011 년

내가 얻을 : echo -ne "\n" | xxd 0000000: 0aecho -n "\n" | xxd 0000000: 5c6eecho "\n" | xxd 0000000: 5c6e 0a 나는 단일 및 이중 따옴표의 차이를 보지 못했어요. 내 셸은 일반 bash입니다. 이러한 기본 기능의 동작을 조절하는 설정이 있습니까?
Marcin

43

yes명령이 유용 할 수 있습니다 .

보다 man yes


56
yes유용하다고 생각합니다.
Pureferret 2012 년

2
이것은 Enter 키가 아닌 "y"를 반복적으로 누르는 것과 같습니다. 이것은 아마도 예 / 아니오 질문을 원하는 것이지만 "y"를 기대하지 않는 것은 작동하지 않습니다.
Burhan Ali

5
@BurhanAli : yes출력으로 보내는 내용을 변경할 수 있습니다 . 맨 페이지를 읽으십시오.
siride

1
기본값을 예상하는 스크립트에 대해 yes 여러 번 보낼 수
있습니까

이것은 yum과 같은 경우에만 작동합니다. 해당 문자열이 예상되는 위치.
einarc


22

다음은 다음을 사용하는 샘플 사용입니다 expect.

#!/usr/bin/expect
set timeout 360
spawn my_command # Replace with your command.
expect "Do you want to continue?" { send "\r" }

man expect자세한 내용은 다음 을 확인 하십시오.


특히 Enter 키를 여러 번 눌러야하는 경우에 유용합니다.
Andy

이것은 특히 다른 stdout 및 stdin 문자열이 전송되는 phars와 같은 경우에 가장 좋은 방법입니다.
einarc

또한 인수가있는 경우 my_command arg 만 입력해야합니다.
einarc

11

당신은 expect 을 사용할 수 있습니다 ( man expect 는 예제와 함께 제공됩니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.