Autor |
Nachricht |
|
Titel: apt-get Skript (Loop, Schleife)
Verfasst am: 15.06.2008, 20:01 Uhr
|
|
Anmeldung: 30. Jun 2005
Beiträge: 449
|
|
Mhm,
irgendwie ist das komisch. Ich lese Packages aus einer Datei und kann diese via echo regulär ausgeben, doch wende ich apt-get install auf ein Package an, so wird es installiert und die Schleife nach der ersten Package-Installation abgebrochen. Das würde ich sehr gerne vermeiden und vorallem verstehen.
Hier der 3-Zeiler:
Code:
# $1 ---> Eingabedatei, in der die Packages aufgelistet sind
while read FILE; do
echo "installing $FILE ..."
if apt-get install -y "$FILE" >> /dev/null 2>&1; then
echo "--> $FILE was installed"
else
echo "--> Could not install $FILE"
fi
done < "$1"
Greetz
Dannyboy |
|
|
|
|
 |
|
Titel:
Verfasst am: 16.06.2008, 19:13 Uhr
|
|
Anmeldung: 30. Jun 2005
Beiträge: 449
|
|
Ich kann nicht glauben, dass ich bisher der Einzige bin, der versucht hat Pakete in einer Schleife zu installieren.
Greetz
Dannyboy |
|
|
|
|
 |
|
Titel:
Verfasst am: 16.06.2008, 19:24 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
Ach installier dir einfach aptitude, das ignoriert fehlende Pakete. |
|
|
|
|
 |
|
Titel:
Verfasst am: 17.06.2008, 21:20 Uhr
|
|
Anmeldung: 30. Jun 2005
Beiträge: 449
|
|
Hi Kano,
ich wollte ja das Problem vor allem versehen. Scheint als wird STDIN leer gesaugt und die Schleife deshalb beendet. Hab' nun ein Work-Around mit <xargs> geschrieben, so dass es funktioniert.
Code:
#!/bin/bash
INSTALLED="$HOME/apt_installed.info"
NOT_INSTALLED="$HOME/apt_not_installed.info"
[ "$UID" -ne "0" ] && false_exit "You must be root to use this script"
function false_exit () {
echo "$1"; echo "breaking up."; exit 1
}
[ -r "$1" ] || false_exit "Cannot read file $1"
touch "$INSTALLED" "$NOT_INSTALLED" > /dev/null 2>&1
[ -w "$INSTALLED" -a -w "$NOT_INSTALLED" ] || false_exit "could not create logfiles in $HOME"
#[ $(ping -c 1 "google.de" > /dev/null 2>&1) ] || false_exit "internet connection not active"
echo "Updating debian-sources ..."
if ! apt-get update; then
false_exit "an error occured while updating debian-sources. Please fix this issue and run this script again"
fi
while read FILE; do
echo "installing $FILE ..."
if echo "$FILE" | xargs apt-get install -y >> /dev/null 2>&1; then
echo "--> $FILE was installed" | tee -a "$INSTALLED"
else
echo "--> Could not install $FILE" | tee -a "$NOT_INSTALLED"
fi
done < "$1"
echo "Logfiles for installed and dropped packages are:"
echo " - $INSTALLED"
echo " - $NOT_INSTALLED"
echo "operation is done"
Greetz
DANNYBOY |
|
|
|
|
 |
|
Titel:
Verfasst am: 17.06.2008, 22:23 Uhr
|
|
Anmeldung: 17. Dez 2003
Beiträge: 16792
|
|
done <<EOT
$(cat "$1")
EOT
hätte es wohl getan. Aber dein script ist insofern sinnlos, wenn du nicht die installierten bzw. nicht installierten Pakete loggst. Wennst es einfach nur installieren willst ist aptitude einfacher. |
|
|
|
|
 |
|
|
|