すべてのGitHubリポジトリを更新するスクリプトを作成したかったのです。
ユーザー名とパスワードを入力するだけで、スクリプトはリポジトリのリストを調べ、呼び出し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スクリプトは次のとおりです。
#! /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
bashスクリプトを実行すると、期待どおりに動作します。
- 情報の入力を求められます。
- スクリプトは正常に起動し、
project_list.txt
ファイルの読み取りを続行します。 - リポジトリのディレクトリにあることがわかると、githubexpectスクリプトを呼び出し、情報を正しく渡します(これをテストしました)。
- githubexpectは正しくスポーンし
git push
ます。 - 入力のプロンプトが表示されます(これはコンソールで確認しました)。
- それは私の情報を提供します(繰り返しますが、私もこれを見ました)。
- その後、何も起こらなかったように、次のリポジトリに進みます。<-エラー!
現在のスクリプトが実行されているディレクトリではなく、githubexpectスクリプトがgit push
それ自体に対して生成されている可能性があるため、gitはリポジトリを検出しません。githubexpectが存在する私のスクリプトフォルダもリポジトリであるため、これはおそらく誤りです。