고수님들 방법좀 부탁드립니다 리눅스 대화형명령어를 실행하기

jjjjrr의 이미지

안녕하세요
오래전부터 헤메고있읍니다
제가하려는작업은
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에서 스트립트를 실행시키는방법도 좋구여
근데 대화형모드를 어떻게 실행시켜야될지를 모르겠읍니다
고수님들 방법좀 부탁드립니다
좋은꿈꾸세요

pynoos의 이미지

제가 테스트한 바로, netbsd에서 nsupdate 에 ktrace를 걸어 살펴본바에 의하면,

 27082 nsupdate CALL  ioctl(0x1,TIOCGETA,0xbfbfb2e8)
 27082 nsupdate RET   ioctl 0
 27082 nsupdate CALL  __fstat13(0,0xbfbfb584)
 27082 nsupdate RET   __fstat13 0
 27082 nsupdate CALL  break(0x809b000)
 27082 nsupdate RET   break 0
 27082 nsupdate CALL  ioctl(0,TIOCGETA,0xbfbfb5b8)
 27082 nsupdate RET   ioctl 0
 27082 nsupdate CALL  write(0x1,0x807b000,0x2)
 27082 nsupdate GIO   fd 1 wrote 2 bytes
       "> "
 27082 nsupdate RET   write 2
 27082 nsupdate CALL  read(0,0x808b000,0x10000)

TIOCGETA 라는 isatty 계열의 call을 하는 군요.

보통 이런 call 은 file descriptor가 키보드에 연결되어 있는지 pipe 인지 확인하는데 사용되어, 키보드 일경우에만 프롬프트입력을 받도록 하는데 사용됩니다.

따라서 nsupdate 가 일반적인 shell 의 pipe나 redirection에 의한 명령어 전달은 사용할 수 없습니다.

nsupdate에서 외부 파일에서 읽을 수 있는 option이... 있다면 가능하겠지만... 제가 그 명령을 잘 모르는 관계로.....

고민해보세요.

신승한의 이미지

대화형 프로그램을 배치 모드로 사용 하는데 많은 도움을 주도록 만들어진 프로그램입니다. 웬만한 RPM 기반 Distro 에는 기본 장착 되있는것으로 압니다.
그럼 행운을 빕니다., :wink:

jjjjrr의 이미지

안녕하세요
답변감사합니다
해결될것같읍니다
즐거운하루하루되시구
항상행복하십시요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.