6

すべての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スクリプトを実行すると、期待どおりに動作します。

  1. 情報の入力を求められます。
  2. スクリプトは正常に起動し、project_list.txtファイルの読み取りを続行します。
  3. リポジトリのディレクトリにあることがわかると、githubexpectスクリプトを呼び出し、情報を正しく渡します(これをテストしました)。
  4. githubexpectは正しくスポーンしgit pushます。
  5. 入力のプロンプトが表示されます(これはコンソールで確認しました)。
  6. それは私の情報を提供します(繰り返しますが、私もこれを見ました)。
  7. その後、何も起こらなかったように、次のリポジトリに進みます。<-エラー!

現在のスクリプトが実行されているディレクトリではなく、githubexpectスクリプトがgit pushそれ自体に対して生成されている可能性があるため、gitはリポジトリを検出しません。githubexpectが存在する私のスクリプトフォルダもリポジトリであるため、これはおそらく誤りです。

4

1 に答える 1

11

\rの代わりに送信する必要があり\nます。git pushただし、本当の問題は、完了するのを待たないことです。これをexpectスクリプトの最後の行として追加します

expect eof
于 2012-12-30T17:11:59.503 に答える