고수님들 방법좀 부탁드립니다 리눅스 대화형명령어를 실행하기
안녕하세요
오래전부터 헤메고있읍니다
제가하려는작업은
c로프로그램을 만들구여
프로그램내에서 리눅스 명령어를 실행하는겁니다
근데 명령어가 대화형입니다
그냥명령을 내리는것은 popen함수로 간단하게될것같은데
대화형이라서 어떻게해야될지를모르겠읍닏
제가하려는 작업을 적어보면여
dns bind를 설치하면 nsupdate가 자동설치됩니다
프롬프트에서 nsupdate명령을 내리면
> 이렇게 대화형모드로 나옵니다
여기서
>prereq nxdomain aa.bb.com. 여기서 엔터치고
>update add aa.bb.com. 300 A 222.222.222.222 여기서또엔터치구여
> 나오면 그냥다시 엔터를 쳐야만 됩니다
>여기까지만 하면되는데여
이걸스크립트로 작성해서
프로그램에서 스크립트를 실행하는방법으로 해봤는데도 잘안됩니다
아래와같이 작성했읍니다
#!/bin/bash
echo "prereq nxdomain aa.bb.com.; update add aa.bb.com.
300 A 222.222.222.222;;" | nsupdte
이렇게 해줘는데여 작동이 안됩니다
실행은되는데여
스크립트가 실행한명령이 적용이안됩니다
왜그럴까요
몇일째 고생중인데
c 로 해결할수있으면좋겠는데
아니면 쉘스크립트를 작성해서 c에서 스트립트를 실행시키는방법도 좋구여
근데 대화형모드를 어떻게 실행시켜야될지를 모르겠읍니다
고수님들 방법좀 부탁드립니다
좋은꿈꾸세요
제가 테스트한 바로, netbsd에서 nsupdate 에 ktrace를
제가 테스트한 바로, netbsd에서 nsupdate 에 ktrace를 걸어 살펴본바에 의하면,
TIOCGETA 라는 isatty 계열의 call을 하는 군요.
보통 이런 call 은 file descriptor가 키보드에 연결되어 있는지 pipe 인지 확인하는데 사용되어, 키보드 일경우에만 프롬프트입력을 받도록 하는데 사용됩니다.
따라서 nsupdate 가 일반적인 shell 의 pipe나 redirection에 의한 명령어 전달은 사용할 수 없습니다.
nsupdate에서 외부 파일에서 읽을 수 있는 option이... 있다면 가능하겠지만... 제가 그 명령을 잘 모르는 관계로.....
고민해보세요.
---
http://coolengineer.com
Expect 라는 넘을 사용 해보시지요.
대화형 프로그램을 배치 모드로 사용 하는데 많은 도움을 주도록 만들어진 프로그램입니다. 웬만한 RPM 기반 Distro 에는 기본 장착 되있는것으로 압니다.
그럼 행운을 빕니다., :wink:
항상행복하십시요
안녕하세요
답변감사합니다
해결될것같읍니다
즐거운하루하루되시구
항상행복하십시요
댓글 달기