2012-05-01 18 views
7

gitリポジトリからソフトウェアの最新バージョンを取得し、設定ファイルを更新するスクリプトを作成しようとしています。レポから引き出すときには、パスワードを入力する必要があります。私はスクリプトがすべてを自動化したいので、私は自動的にそれを記入する必要があります。このサイトでは、パスワードプロンプトを探してパスワードを送信するために "expect"を使用する方法を説明しました。私はそれを動作させることはできません。ここにスクリプトがあります:bashスクリプトでexpectを使用する

#!/usr/bin/expect -f 
set password [lrange $argv 0 0] 
set timeout -1 

clear 
echo "Updating Source..." 
cd sourcedest 
git pull -f origin master 

match_max 100000 
# Look for passwod prompt 
expect "*?assword:*" 
# Send password aka $password 
send -- "$password\r" 
# send blank line (\r) to make sure we get back to gui 
send -- "\r" 
expect eof 

git checkout -f master 
cp Config/database.php.bak Config/database.php 
cp webroot/index.php.bak webroot/index.php 
cp webroot/js/config.js.bak webroot/js/config.js 

私は間違っていますか?ここに私がそれを得たサイトがあります:http://bash.cyberciti.biz/security/expect-ssh-login-script/

+0

スポーンを忘れたとします。 – bdecaf

+0

私はその部分を望んでいません。私はこれを私のローカルマシンの中で実行しています。 – LordZardeck

+0

git、cd、cpには有効なexpectコマンドがありません。あなたはそれのためのシェルを生成する必要があります。 – bdecaf

答えて

16

これは私の自身のいくつかの観察と、コメントからかなり取られています。しかし、誰もがこれに本当の答えを提供したいようだないので、ここに行く:

あなたの問題はあなたがスクリプトを期待しており、あなたがのbashスクリプトようにそれを治療しています。期待は、何がcd,cpおよびgitを意味するのか分からない。バッシュはそうです。あなたが望むのは、期待する呼び出しを行うbashスクリプトです。例:

#!/usr/bin/env bash 

password="$1" 
sourcedest="path/to/sourcedest" 
cd $sourcedest 

echo "Updating Source..." 
expect <<- DONE 
    set timeout -1 

    spawn git pull -f origin master 
    match_max 100000 

    # Look for passwod prompt 
    expect "*?assword:*" 
    # Send password aka $password 
    send -- "$password\r" 
    # send blank line (\r) to make sure we get back to gui 
    send -- "\r" 
    expect eof 
DONE 

git checkout -f master 
cp Config/database.php.bak Config/database.php 
cp webroot/index.php.bak webroot/index.php 
cp webroot/js/config.js.bak webroot/js/config.js 

ただし、larsksさんがコメントに指摘しているように、sshキーの使用をお勧めします。次に、expectの呼び出しをすべて取り除くことができます。

+0

それは私のために働いた!どうもありがとうございます! – Deano

関連する問題