csh의 모호한 입력 리디렉션 오류

csh의 모호한 입력 리디렉션 오류
echo "yes" | my_program < input_file

Ambiguous input redirectcsh에서 오류가 발생했습니다. 이 문제를 해결하는 방법?

답변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을 가져올 수 없으므로 입력을 제공해야 하는 프로세스를 선택해야 합니다.

관련 정보