답변:
이 경우를 위해 특별히 작성된 명령이 있습니다. yes
$ yes | ./script
이것이하는 일은의 출력 yes을의 입력에 연결하는 것 입니다 ./script. 따라서 ./script사용자 입력을 요청하면 대신의 출력을 얻습니다 yes. 출력은 yes끝없는 스트림과 y개행 문자입니다. 따라서 기본적으로 사용자가의 y모든 질문에 입력하는 것처럼 ./script.
nyes ( y) 대신 no ( ) 라고 말하면 다음과 같이 할 수 있습니다.
$ yes n | ./script
일부 도구에는 항상 yes답변으로 가정 할 수있는 옵션이 있습니다. 예를 들어 여기를 참조하십시오 : 'apt-get upgrade'에서 yes / no 프롬프트를 무시하십시오 .
입력을 입력하는 다른 방법 :
y스크립트가 얼마나 많은지를 정확히 알고 있다면 다음 과 같이 할 수 있습니다.
$ printf 'y\ny\ny\n' | ./script
줄 바꿈 ( \n)은 Enter 키입니다.
printf대신에 사용하면 yes더 세밀한 입력 제어가 가능합니다.
$ printf 'yes\nno\nmaybe\n' | ./script
드문 경우이지만 명령에서 문자 다음에 Enter 키를 누르지 않아도됩니다. 이 경우 개행을 생략하십시오.
$ printf 'yyy' | ./script
완전성을 위해 here 문서를 사용할 수도 있습니다 .
$ ./script << EOF
y
y
y
EOF
또는 쉘이 here 문자열을 지원하면 :
$ ./script <<< "y
y
y
"
또는 한 줄에 하나의 입력으로 파일을 만들 수 있습니다.
$ ./script < inputfile
명령이 충분히 복잡하고 위의 방법으로 더 이상 충분하지 않으면 expect 를 사용할 수 있습니다.
다음은 매우 간단한 expect 스크립트의 예입니다.
spawn ./script
expect "are you sure?"
send "yes\r"
expect "are you really sure?"
send "YES!\r"
expect eof
기술적 인 nitpick :
귀하의 질문에 제시 한 가상 명령 호출이 작동하지 않습니다.
$ ./script < echo 'yyyyyyyyyyyyyy'
bash: echo: No such file or directory
쉘 문법은 명령 행 어디에서나 경로 재 지정 연산자를 허용하기 때문입니다. 쉘에 관한 한 가상 명령 줄은 다음 줄과 같습니다.
$ ./script 'yyyyyyyyyyyyyy' < echo
bash: echo: No such file or directory
즉 ./script, 인수 'yyyyyyyyyyyyyy'와 함께 호출되며 stdin은이라는 파일에서 입력을받습니다 echo. 그리고 파일이 존재하지 않기 때문에 bash는 불평합니다.
cannot enable tty mode on non tty input. 이에 대한 해결 방법을 알고 있습니까?
printf트릭을 시도하면 run오류 메시지가 표시 Warning: Tried to connect to session manager, None of the authentication protocols specified are supported되고 스크립트가 새 터미널에서 열리고 평소처럼 입력을 수동으로 입력하라는 메시지가 표시 됩니다. 그건 그렇고 데비안에서 일어나고 있습니다. 어떤 제안?
apt-get예를 들어 어떤 것들은 자동 모드로 실행하기 위해 특수 플래그를 허용하고 기본값을 허용합니다. 년 apt-get의 경우, 당신은 단지 그것을 통과 -y플래그를. 이것은 스크립트에 완전히 의존합니다.
더 복잡한 것들이 필요한 경우 스크립트를 expect 스크립트로 묶을 수 있습니다. expect를 사용하면 출력을 읽고 입력을 보낼 수 있으므로 다른 스크립팅에서 허용하지 않는 매우 복잡한 작업을 수행 할 수 있습니다. 다음 은 Wikipedia 페이지의 예제 중 하나입니다 .
# Assume $remote_server, $my_user_id, $my_password, and $my_command were read in earlier
# in the script.
# Open a telnet session to a remote server, and wait for a username prompt.
spawn telnet $remote_server
expect "username:"
# Send the username, and then wait for a password prompt.
send "$my_user_id\r"
expect "password:"
# Send the password, and then wait for a shell prompt.
send "$my_password\r"
expect "%"
# Send the prebuilt command, and then wait for another shell prompt.
send "$my_command\r"
expect "%"
# Capture the results of the command into a variable. This can be displayed, or written to disk.
set results $expect_out(buffer)
# Exit the telnet session, and wait for a special end-of-file character.
send "exit\r"
expect eof
.sh쉘 스크립트 와 함께 사용할 수 없습니다 . 아니면 방법이 있습니까?
cat다음과 bash같이 텍스트 파일에서 스크립트로 파이프 된을 사용하여 스크립트에 사용자 입력을 제공 할 수 있습니다 .
cat input.txt | bash your_script.sh
y, n, 숫자, 문자열 등 원하는 답변을 원하는 사용자 입력을 input.txt 파일에 넣으십시오.
-f옵션이 특정 명령과 잘 작동합니다.