Ich wollte ein Skript erstellen, das alle meine GitHub-Repositorys aktualisieren würde.Warum funktioniert mein Git Auto-Update Script nicht?
Ich würde nur meinen Benutzernamen und mein Passwort eingeben müssen, und das Skript würde eine Liste von Repositories durchlaufen, rufen Sie git push
und stellen Sie die erforderlichen Informationen über eine zusätzliche Expect-Skript.
Dies ist mein Bash-Skript:
#! /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
ist eine globale Umgebungsvariable, die einen absoluten Pfad zu meinem Skript-Ordner enthält. Hier
ist das githubexpect Skript:
#! /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
Wenn ich die Bash-Skript laufen, Dinge wie erwartet gehen.
- Ich bin aufgefordert, die Info.
- Das Skript wird erfolgreich gestartet und liest weiterhin die Datei
project_list.txt
. - Sobald es sich im Verzeichnis des Repositorys befindet, ruft es das Githubexpect-Skript auf und gibt korrekt über die Info weiter (ich habe das getestet).
- githubexpect gibt korrekt an
git push
. - Es wird aufgefordert, die Eingabe (ich sah dies in der Konsole).
- Es stellt meine Informationen zur Verfügung (wieder sah ich das auch).
- Dann geht es einfach weiter zum nächsten Repository, als wäre nichts passiert. < - Fehler!
ich den Verdacht, dass das githubexpect Skript könnte in ausgeführt wird git push
relativ zu sich selbst, und nicht das Verzeichnis werden Laichen, das aktuelle Skript so git finden nicht einmal ein Repository. Das ist wahrscheinlich falsch, da mein Skriptordner, in dem sich githubexpect befindet, auch ein Repository ist.
Es funktioniert jetzt! Würde es Ihnen etwas ausmachen zu erklären, warum Programme 'eof' zurückgeben, wenn sie fertig sind? Vielen Dank. – corazza
Das scheint wie eine ausgezeichnete Frage SO :) – jarodeells
Es ist nicht unbedingt, dass das Programm eof zurückgibt: das erzeugte Programm beendet, und Expect verwendet das Schlüsselwort "eof" für diese Bedingung. –