2010-07-23 3 views
7

Il mio solito comando per mantenere aggiornato il computer è piuttosto dettagliato e può comportare più di una richiesta di password se qualsiasi comando richiede un lungo time:apt-get update, dist-upgrade, autoremove, autoclean in un singolo comando sudo

sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get autoremove && sudo apt-get autoclean 

Mi piacerebbe abbreviare questo a un solo comando (preferibilmente senza utilizzare un alias globale).

Solution basano su @amra's answer e another tip:

sudo sh -c 'apt-get update && apt-get upgrade --yes && if [ -f /var/run/reboot-required ]; then echo You should reboot; fi' 
+1

provare: * sudo -s * quindi utilizzare: * apt-get update && apt-get dist-upgrade && apt-get autoremove && apt-get autoclean; logout * – Javaguru

+0

Appartiene a superuser.com –

+0

http://www.gnu.org/software/bash/manual/bashref.html#Command-Grouping – weakish

risposta

15

Prova

sudo sh -c "apt-get -y update;apt-get -y dist-upgrade;apt-get -y autoremove;apt-get -y autoclean" 
+0

Esiste un nome comune che le persone possono assegnare alla creazione di un comando mega-upgrade personalizzato come Questo? (Ho inventato il nome mega-upgrade;) – Mikeumus

+0

Lo chiamerei: 'alias apt-update-dist-upgrade-autoremove-autoclean = 'sudo sh -c" apt-get -y update; apt-get -y dist -upgrade; apt-get -y autoremove; apt-get -y autoclean "'"; Ma preferirei solo "apt-get upgrade" e decidere da solo quando "dist-upgrade". – rubo77

1

Si può utilizzare l'operatore '& &' di eseguire il comando 'cmd2' se e solo se 'cmd1' è stato eseguito senza errori:

(cmd1 && cmd2) 

Ma questo funziona solo in bash direttamente, senza 'sudo' davanti.

Così, al fine di funzionare come previsto, siamo in grado di utilizzare il seguente comando:

sudo /bin/sh -c "apt-get update && apt-get dist-upgrade && apt-get autoremove && apt-get autoclean" 

Nota che la risposta proposta da Amra non lo fa lo stesso del comando precedente: comandi separati da ";" vengono eseguiti in sequenza senza prendere in considerazione il codice di uscita del comando precedente. Quando si utilizza "& &" per separare i comandi, viene preso in considerazione il codice di uscita. Quindi, se abbiamo "cmd1 & & cmd2", cmd2 viene eseguito solo se il codice di uscita di cmd1 era 0 (cioè, cmd1 non ha avuto esito negativo).