2018년 11월 6일 화요일

[Linux] Shell script for git pull - username & password 자동입력

Linux 환경에서 git pull 명령어 수행시 username & password를 script로 처리하기 위한 작업을 정리한다.

System : Ubuntu 14.04 LTS

==================================================================

script 수행을 위해서는 expect 가 설치되어 있어야 한다.
$ sudo apt-get install expect

expect 명령어는 아래와 같이 정의되어 있다. (자세한 내용은 링크 참조)

  • Expect is a program that "talks" to other interactive programs according to a script. 
  • expect 기본 명령
    • spawn : 명령어를 실행한다.
    • expect “문자열” : “문자열"을 만나면
    • send “문자열\r” : "문자열"을 전송한다.
    • interact : expect를 끝내고 사용자에게 제어권을 넘긴다.
    • expect eof : expect 종료


==================================================================

[ Script Sample ]

사용자 옵션이 없을 경우, script에 정의된 default parameter를 기준으로 동작하도록 정의한다.

$ git-pull -d $HOME/work/project1 -u sisbsoma -p 1234

------------------------------------------------------------------------------------------------

[ Sample code] 


file path : $HOME/bin/git-pull

#!/bin/bash


# Username & Password
USERNAME=USER_NAME  ## set user.name for git repository
PASSWD=PASSWORD    ## set password for git repository

# Default Working directory
WORKDIR=$HOME/work  ## set default working directory

# Help function
usage() {
echo "usage : $0 [OPTIONS]"
echo "  -h : Display Usage"
echo "  -d : Working Directory"
echo "  -u : Username"
echo "  -p : Password"
exit 0
}

# Git pull
func_gitpull() {
cd $WORKDIR

expect <<EOF
spawn git pull
expect "Username"
send $USERNAME\r
expect "Password"
send $PASSWD\r
expect eof
EOF
}

# Update params
while getopts "h:d:u:p:" opt
do
        case $opt in
                d) WORKDIR=$OPTARG
                ;;

                u) USERNAME=$OPTARG
                ;;

                p) PASSWD=$OPTARG
                ;;

                h) usage ;;
                ?) usage ;;
        esac
done

func_gitpull


------------------------------------------------------------------------------------------------