| 
 
				
					| 
  
  
    | 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: 16809
 
 
 |  | 
        
          | 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: 16809
 
 
 |  | 
        
          | 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.
 |  
          |  |  
         
	        |  |  |  
    |  |  
    |  |  
    |  |  |  |