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