kanotix.com

Scripte - apt-get Skript (Loop, Schleife)

Dannyboy - 15.06.2008, 20:01 Uhr
Titel: apt-get Skript (Loop, Schleife)
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. Winken

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
Dannyboy - 16.06.2008, 19:13 Uhr
Titel:
Ich kann nicht glauben, dass ich bisher der Einzige bin, der versucht hat Pakete in einer Schleife zu installieren. Geschockt

Greetz
Dannyboy
Kano - 16.06.2008, 19:24 Uhr
Titel:
Ach installier dir einfach aptitude, das ignoriert fehlende Pakete.
Dannyboy - 17.06.2008, 21:20 Uhr
Titel:
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. Sehr glücklich

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
Kano - 17.06.2008, 22:23 Uhr
Titel:
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.
Alle Zeiten sind GMT + 1 Stunde
PNphpBB2 © 2003-2007