echo "yes" | my_program < input_file
Ambiguous input redirect
csh에서 오류가 발생했습니다. 이 문제를 해결하는 방법?
답변1
op가 남긴 댓글에 따라 my_program
질문에 대한 답변이 필요한 경우도 있습니다 yes|no
.
expect
이는 운영자가 예상 매뉴얼 페이지에서 작업에 적합한 도구를 사용하기를 원한다는 것을 의미합니다 .
Expect는 스크립트를 기반으로 다른 대화형 프로그램과 "대화"하는 프로그램입니다. 스크립트에 따라 Expect는 프로그램이 예상할 수 있는 것과 올바른 응답이 무엇인지 알고 있습니다. 통역 언어는 대화를 안내하기 위해 분기 및 높은 수준의 제어 구조를 제공합니다. 또한 사용자는 필요할 때 직접 제어하고 상호 작용한 다음 제어권을 스크립트로 반환할 수 있습니다.
이제 운영 프로그램의 프롬프트가 무엇인지 모르지만 다음 Are you sure
으로 시작한다고 가정합니다.
#!/usr/bin/expect
spawn bash -c "my_program < /tmp/input"
expect {
"Are you sure" {
send "yes"
}
eof
}
위와 같이 쉘 스크립트를 생성하고 실행하려는 명령 대신 실행하면 됩니다.
"프로그램", "입력 파일", "질문", "귀하의 답변"(마지막 두 개는 선택 사항입니다. "질문"이 표시되지 않으면 전송되지 않습니다. ") reply"를 입력하면 스크립트가 성공적으로 종료됩니다.)
#!/usr/bin/expect
set arg1 [lindex $argv 0]
set arg2 [lindex $argv 1]
set arg3 [lindex $argv 2]
set arg4 [lindex $argv 3]
spawn bash -c "$arg1 < $arg2"
expect {
"$arg3" {
send "$arg4"
}
eof
}
다음을 사용하십시오(위의 내용을 에 복사했다고 가정 myexp.sh
).
./myexp.sh "my_program" "/tmp/input" "yes"
일반적으로 여러 입력 소스가 필요한 경우 여기 문서를 사용하여 정렬할 수 있습니다.
my_program <<EOF
`cat input_file`
yes
EOF
다중 입력을 위한 또 다른 옵션:
echo 'yes' >> input_file
또는 임시 파일을 사용하십시오.
echo 'yes' > /tmp/myfile$$.txt
cat input_file >> /tmp/myfile$$.txt
my_program < /tmp/myfile$$.txt
그것은 모두 당신이 달성하고자 하는 것에 달려 있습니다.
편집 (댓글에서):
( echo 'yes'; cat input_file;) | my_program
또한 작동합니다...여기 문서를 찾았습니다.더 쉽게읽어보세요, YMMV.
답변2
문제는 echo
표준 출력을 my_program
표준 입력으로 연결한다는 것입니다.
echo "yes" | my_program
...그리고 동시에 당신도반품input_file
표준 입력에 내용을 입력합니다 my_program
.
my_program < input_file
프로세스(이 경우 my_program
)는 서로 다른 두 소스에서 stdin을 가져올 수 없으므로 입력을 제공해야 하는 프로세스를 선택해야 합니다.