2017-06-25 2 views
1

私の仕事でgitを使うには、git_login < user_name>というスクリプトを使ってログインする必要があります。このスクリプトはgit.shという名前のスクリプトに組み込まれています。ユーザーのパスワード。git add、expectスクリプト

私はこのプロセスを自動化しようとしていますが、expectスクリプトは私がログインしたことを示していますが、プッシュまたはコミットしようとすると、未知のユーザーのパスワードを要求します。

#!/usr/bin/expect -f 

set timeout 15 
set tagName [[lindex $argv 0] 
if { [llength $tagName] == 0 } { 
    puts "no tag name provided...\n" 
    exit 1 
} 
spawn /bin/bash -c "source git.sh && git_login my_user" 
expect "assword: " 
send -- "my_password" 
expect "is now logged in" 
exec git add . 
exec git commit "$tagName" 
exit 

またはその代わりに、最後の3行

git push origin "$tagName" 
exit 

私は expectスクリプトがあることを私に示して

+0

'今in'をログに記録されるため、あなたが期待するパターンを持っています。ここにそれを掲示している間にそれを逃したことがありますか?正しいスクリプトで更新してください。 – Dinesh

+0

私は*スクリーンシュートを追加する方が*説明するよりはるかに簡単だと同意します。しかし、https://meta.stackoverflow.com/questions/285551/why-not-to-upload-images-of-code-on-so-質問の答えが – pynexj

+0

の場合はスクリーンショットとなりました。「現在ログインしています」と思われます。ありがとうございました:) –

答えて

0

(デバッグ用)-dの代わり-fでスクリプトを実行します私はログインしました

グロブパターン "is now logged in"を検索しても見つからないことは明らかです。

expect automate toolは、通常のような配列を有する:あなたのデバッグのスクリーンショットを1として

expect "password:" 
# Send the password, and then wait for a shell prompt. 
send "$my_password\r" 

(ないexpect "assword:"

+0

はい、それは...
1行が見えます緑色の線の後にパターンが「今はログインしました」が見つかりました。さらに、Pをasswordに追加して再度実行したことを確認してください。同じ結果 –

+0

@RamiHassan 'expectによって監視されるスクリプトのどの段階gitにパスワードを尋ねますか? git *がパスワード要求を表示する直前に、これが同時性の問題である可能性はありますか? – VonC

+0

この部分は:spawn/bin/bash -c "ソースgit.sh && git_login my_user"、と私は考えて、log_inはスクリプトgit.shによって行われ、私はコミット/プッシュ部分の前にスリープを追加しようとしたが、は役に立ちませんでした –

関連する問題