2010-07-23 11 views
7

Ma commande habituelle pour garder la machine à jour est plutôt verbeuse, et elle peut entraîner plus d'une invite de mot de passe si une commande prend une longue Je voudrais raccourcir cela à une commande (de préférence sans utiliser un alias global).apt-get mise à jour, dist-upgrade, autoremove, autoclean dans une seule commande sudo

Solution basées sur @amra's answer et 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

essayez: * sudo -s * puis utilisez: * apt-get update && apt-get dist-upgrade && apt-get autoremove && apt-get autoclean; déconnexion * – Javaguru

+0

Appartient à superuser.com –

+0

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

Répondre

15

Essayez

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

Y a-t-il un nom commun que les gens attribuent à la création d'une commande de mise à jour de méga personnalisée comme ce? (J'ai inventé le nom mega-upgrade;) – Mikeumus

+0

Je l'appellerais: 'alias apt-update-dist-mise à niveau-autoremove-autoclean = 'sudo sh -c" apt-get -y mise à jour; apt-get -y dist -upgrade; apt-get -y autoremove; apt-get -y autoclean ""; Mais je préférerais seulement 'apt-get upgrade' et décider moi-même quand' dist-upgrade'. – rubo77

1

On peut utiliser le '& &' opérateur d'exécuter la commande 'cmd2' si et seulement si 'cmd1' a été exécuté sans erreur:

(cmd1 && cmd2) 

Mais cela ne fonctionne que directement dans bash, sans 'sudo' devant.

Ainsi, afin de travailler comme prévu, nous pouvons utiliser la commande suivante:

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

Notez que la réponse proposée par Amra ne pas la même chose que la commande ci-dessus: Les commandes séparées par « ; » sont exécutés en séquence sans tenir compte du code de sortie de la commande précédente. Lorsque vous utilisez "& &" pour séparer les commandes, le code de sortie est pris en compte. Ainsi, si nous avons "cmd1 & & cmd2", cmd2 n'est exécutée que si le code de sortie de cmd1 était 0 (c'est-à-dire que cmd1 n'a pas échoué).