[완료] 스크립트 실행 중 자동 키입력 방법

sansolse의 이미지

예를 들도록 하겠습니다.

A라는 script는 다음과 같은 역할을 합니다.
1. user를 물어본다.
2. passwd를 물어본다.
3. 특정 directory의 file들을 보여준다(ls).

A script를 실행시키면 세 번의 사용자 입력을 받게 되겠죠.
그런데 이 중에서 1번과 2번 항목은 매번 써 넣기 귀찮다 이거죠.
해서 1번과 2번은 미리 입력된 user와 passwd를 바로 넣어 넘어가고, 3번에서 시작했으면 하는 게 목적입니다.

여기서 A라는 script를 제가 수정할 수 있다면 1,2번 항목을 키입력을 받지 않고 변수를 수정해 뜯어고치면 되겠지만,
불행히도 A script는 binary file이라 고칠 수도, 볼 수도 없는 상황입니다.

어떤 방법이 있을까요?

'ftp 접속후 auto-login까지만 하고싶다.' 등이 비슷한 예입니다.
login 이후 ftp prompt 부터는 제가 맘대로 하고 싶은 거구요.

(bash, perl, expect 등등 이리저리 찾아봤는데 쉽지가 않더군요..)

고수님들의 답변 부탁 드립니다 (__);

planetarium의 이미지

아래 상자를 그대로 쉘에 입력해 보세요...

cat <<@
abcdefg
hijkl
@

실행 결과 :

abcdefg
hijkl

@는 다른 문자열로 대체하실 수 있습니다.

fdisk /dev/sda <<EOF
o
w
EOF

끔찍한 결과가 나오겠지요...
terzeron의 이미지

expect를 쓰면 간단합니다만...
말씀하신 정도의 내용이면 리다이렉트를 이용해서 해결할 수도 있습니다.

(echo "myid"; echo "mypasswd") | A

echo는 문자열 뒤에 newline만 찍어주도록 되어 있데,
A의 특성 상, newline 앞에 carriage return이 필요한 경우도 종종 있습니다.
이럴 때, ctrl-V, ctrl-M으로 carriage return을 추가하면 됩니다.

개인적으로는 expect만 쓰면 불편해서 perl에 expect module을 붙여서
interactive script를 사용하곤 합니다.

sansolse의 이미지

ftp를 예로 리다이렉트를 다음과 같이 해 보았습니다.

(echo "user myid mypasswd") | ftp -vn ftpaddress

했더니 login까지는 잘 되는데, ftp> 에서 멈추지 않고 곧바로 shell prompt로 나와 버립니다.
Goodbye 하면서 말이죠~
ftp> 에서 멈추게 할 수는 없을까요?

terzeron의 이미지

안 멈추고 끝나는 이유는 더 이상의 입력이 없기 때문입니다.

거기서 사용자의 키 입력을 받게 하려면 expect의 interact 기능이 필요하죠.

이 정도로 간단하게 흉내낼 수는 있습니다만...
(echo "myid"; echo "mypasswd"; cat - ) | ftp ...

sansolse의 이미지

cat - 로 하니깐..
이상하게 passwd 받는 곳에서 멈춰 버리더군요.
이유를 찾다찾다 못 찾아서
구글링으로 expect 간단한 예제를 바꾸어 interact 기능으로 해결했습니다.
interact라는 command를 몰랐다면 제가 필요로하는 예제를 찾기도 힘들었을 거에요~
고맙습니다^^

terzeron의 이미지

expect를 쓰면 간단합니다만...
말씀하신 정도의 내용이면 리다이렉트를 이용해서 해결할 수도 있습니다.

(echo "myid"; echo "mypasswd") | A

echo는 문자열 뒤에 newline만 찍어주도록 되어 있데,
A의 특성 상, newline 앞에 carriage return이 필요한 경우도 종종 있습니다.
이럴 때, ctrl-V, ctrl-M으로 carriage return을 추가하면 됩니다.

개인적으로는 expect만 쓰면 불편해서 perl에 expect module을 붙여서
interactive script를 사용하곤 합니다.

송효진의 이미지

ftp 라면 자동화 필요 없고 lftp 를 설치하시면 됩니다.

lftp -u user,pass -e "cd /asdf; ls" site.com

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

sansolse의 이미지

음 그렇군요!
lftp가 다행히 깔려 있어서 ftp는 위처럼 접근하니깐 되는군요~
유용하게 쓰겠습니다~
ftp 말고 다른 경우에는 윗분이 알려주신 expect의 interact 기능으로 해결했어요~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.