면책 조항:: 저는 활동적인 쉘 스크립터가 아닙니다.
콘솔 출력에 응답하는 스크립트를 만드는 방법은 무엇입니까? 예를 들어, 저는 자정마다 정기적으로 저장소의 변경 사항을 백업 서버에 svnsync하도록 cron을 설정하려고 합니다. 문제는 동기화를 위해 인증 자격 증명을 묻는 메시지가 표시된다는 것입니다.
svnsyncsync는 로그인을 지정하는 옵션을 허용하지 않으므로 간단한 cron 명령이 더 이상 필요하지 않습니다. 스크립트를 시작할 수 있다고 생각하지만 콘솔 출력에 응답하도록 만드는 방법을 알아내려고 노력 중입니다.
예를 들어:
ken@server:~$ svnsync sync https://svn3.backup.net/svn/mirror
Authentication realm: <https://svn3.backup.net/svn/mirror:443> backup.net Subversion Backup
Password for 'ken':
***<send return key>***
Username:***<specify backup.net username>***
Password for '<the name>':***<specify password for username>***
<It proceeds to check out>
***< message >***
스크립트가 응답하기를 원하는 작업은 어디에 있습니까?
답변1
"svnsync sync가 로그인을 지정하는 옵션을 허용하지 않습니다"라고 말씀하셨을 때 회의적이어서 확인했습니다.문서추측해 보세요.하다:
--source-password
--source-username
--sync-password
--sync-username
이러한 옵션은 간단한 크론 스크립트로 돌아가는 데 충분합니다.
네 상황으로 돌아가진짜이러한 옵션을 지정할 수는 없지만 프로그램의 표준 입력으로 데이터를 보내는 래퍼 스크립트를 작성하는 것은 여전히 쉽습니다. 예를 들어 다음가능한작업( program
실행하려는 프로그램은 어디에 있고 text
프로그램에 보내려는 텍스트가 저장된 파일은 어디에 있습니까?):
program < text
그러나 인증을 위해 프로그램은 보안상의 이유로 준비가 되어 있거나 준비 tty
되지 않은 상태 로 작성되는 경우가 많습니다. stdin
나는 그것에 익숙하지 않지만 이 경우에도 여전히 가짜 터미널을 만들 수 있습니다. 이곳은expect
사용하십시오.
답변2
expect
도움이 될 수도 있습니다.
하나 있다오라일리 튜토리얼.
답변3
그러나 이는 일부 스크립트에서 비밀번호를 명시적으로 만드는 것을 의미합니다.
이는 좋은 생각이 아닙니다.
svnsync에는 SSH 키 옵션이 없나요?
답변4
두 가지 유사한 솔루션:
expect
(다른 답변에서 알 수 있듯이) TCL이 필요합니다.pexpect
, 순수 Python으로 작성되었습니다.