
아래 코드는떨어져 있는에 인수를 전달하기 위해 "Bash 스크립트에서 Expect를 사용하여 SSH 명령에 대한 비밀번호 제공"을 선택했습니다 git push
. 잘못된 uname+pwd를 전달하는 것에 대한 예외는 발생하지 않으며, 반대로 올바른 uname+pwd를 전달하는 경우에는 발생하지 않습니다. 실제로는 아무것도 밀지 마세요. 이 문제를 해결하는 방법은 무엇입니까?
git_push.sh
if (( $# == 2 ))
then
:
else
echo "expecting 'username pass', got $@"
exit 1
fi
user="$1"
pass="$2"
expect - <<EOF
spawn git push
expect 'User*'
send "$user\r"
expect 'Pass*'
send "$pass\r"
EOF
단말기:
$ [path]/git_push.sh
spawn git push
Username for 'https://github.com': foo
Password for 'https://[email protected]':
또는 (와일드카드 없이):
spawn git push
expect "Username for 'https://github.com': "
send "$user\r"
expect "Password for 'https://[email protected]': "
send "$pass\r"
답변1
해결하기 위해예상되는질문:
expect - <<EOF
spawn git push
expect 'User*'
send "$user\r"
expect 'Pass*'
send "$pass\r"
EOF
작은따옴표는 Expect에서 특별한 의미가 없으므로 User 및 Pass 프롬프트에서 리터럴 작은따옴표를 찾는 것이 좋습니다. 이러한 프롬프트에는 작은따옴표가 포함되어 있지 않으므로
expect
시간 초과(기본값 10초)가 발생할 때까지 명령이 중단됩니다.비밀번호를 보낸 후에는 푸시가 완료될 때까지 기다리지 않습니다. 예상 스크립트에 실행할 명령이 부족하여 조기에 종료되어 git 프로세스가 종료됩니다. 모든 후에
send
는expect
뭔가를 해야 합니다. 이 경우 생성된 명령이 종료될 것으로 예상됩니다.expect eof
expect - <<_END_EXPECT
spawn git push
expect "User*"
send "$user\r"
expect "Pass*"
send "$pass\r"
set timeout -1 ; # no timeout
expect eof
_END_EXPECT