GitHubのすべてのリポジトリを更新するスクリプトを作成したかったのです。私のgit auto-update Expectスクリプトはなぜ機能しないのですか?
ユーザー名とパスワードを入力するだけで、スクリプトはリポジトリのリストを参照し、git push
と呼び出し、補足のExpectスクリプトを介して必要な情報を提供します。
これは私のbashスクリプトです:
#! /bin/bash
echo "Updating GitHub projects from project_list.txt."
echo
read -p "GitHub username: " un
read -p "GitHub password: " -s pw
echo
echo
while read line
do
eval dir=$line
echo "Updating:" $dir"."
cd $dir
$SF/githubexpect $un $pw
echo
echo
done < $SF/project_list.txt
$SF
は私のスクリプトフォルダへの絶対パスが含まれている地球環境変数です。ここで
がgithubexpectスクリプトです:私はbashスクリプトを実行すると
#! /usr/bin/expect
set un [lindex $argv 0]
set pw [lindex $argv 1]
spawn git push
expect "Username"
send $un\n
expect "Password"
send $pw\n
、物事は期待通りに行きます。
- 情報の入力を求められます。
- スクリプトは正常に開始し、
project_list.txt
ファイルの読み取りを続けます。 - リポジトリのディレクトリに自分自身が見つかると、githubexpectスクリプトが呼び出され、が正しく返されます。が情報を渡します(これをテストしました)。
- githubexpectが正しく生成される
git push
。 - 入力を求めるプロンプトが表示されます(コンソールでこれを確認しました)。
- 私の情報を提供しています(もう一度、これも見ました)。
- その後、何も起こらないように次のリポジトリに進みます。 < - エラー!
することは、私はgithubexpectスクリプトは現在のスクリプトがで実行されているディレクトリをそれ自体にgit push
相対産卵し、ないかもしれないと疑っていますので、gitのにもリポジトリを見つけることができません。 githubexpectが存在する私のスクリプトフォルダがリポジトリでもあるので、これはおそらく間違いです。
これは今動作します!完了したらなぜプログラムが 'eof'を返すのか説明してもらえますか?ありがとう。 – corazza
それは優秀なSOの質問のようです:) – jarodeells
必ずしもプログラムがeofを返すわけではありません。スポーンされたプログラムが終了し、Expectはその条件にキーワード "eof"を使用します。 –