[완료] 스크립트 실행 중 자동 키입력 방법
글쓴이: sansolse / 작성시간: 화, 2009/11/10 - 3:20오후
예를 들도록 하겠습니다.
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 등등 이리저리 찾아봤는데 쉽지가 않더군요..)
고수님들의 답변 부탁 드립니다 (__);
Forums:
cat <<@abcdefghijkl@ 실행
아래 상자를 그대로 쉘에 입력해 보세요...
실행 결과 :
@는 다른 문자열로 대체하실 수 있습니다.
끔찍한 결과가 나오겠지요...
expect를 쓰면
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를 예로 리다이렉트를 다음과 같이 해 보았습니다.
(echo "user myid mypasswd") | ftp -vn ftpaddress
했더니 login까지는 잘 되는데, ftp> 에서 멈추지 않고 곧바로 shell prompt로 나와 버립니다.
Goodbye 하면서 말이죠~
ftp> 에서 멈추게 할 수는 없을까요?
안 멈추고 끝나는
안 멈추고 끝나는 이유는 더 이상의 입력이 없기 때문입니다.
거기서 사용자의 키 입력을 받게 하려면 expect의 interact 기능이 필요하죠.
이 정도로 간단하게 흉내낼 수는 있습니다만...
(echo "myid"; echo "mypasswd"; cat - ) | ftp ...
expect로 해결했습니다^^;
cat - 로 하니깐..
이상하게 passwd 받는 곳에서 멈춰 버리더군요.
이유를 찾다찾다 못 찾아서
구글링으로 expect 간단한 예제를 바꾸어 interact 기능으로 해결했습니다.
interact라는 command를 몰랐다면 제가 필요로하는 예제를 찾기도 힘들었을 거에요~
고맙습니다^^
expect를 쓰면
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 라면 자동화 필요
ftp 라면 자동화 필요 없고 lftp 를 설치하시면 됩니다.
emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/
https://xenosi.de/
음 그렇군요! lftp가
음 그렇군요!
lftp가 다행히 깔려 있어서 ftp는 위처럼 접근하니깐 되는군요~
유용하게 쓰겠습니다~
ftp 말고 다른 경우에는 윗분이 알려주신 expect의 interact 기능으로 해결했어요~
댓글 달기