L'appel est simplement ud
tapé dans un terminal. ud
est défini comme suit dans mon ~/.bash_aliases
:
alias ud='Sudo apt-get update && Sudo apt-get upgrade -y && Sudo apt-get dist-upgrade -y && Sudo apt-get clean -y'
Après une recherche rapide, j'ai trouvé la méthode suivante suggérée pour gérer les fichiers journaux (en utilisant make install
du message d'origine):
$ make install > file.txt 2>&1
Voici le problème; si j'adapte cela à mes besoins, je n'obtiens pas les résultats attendus de la syntaxe suivante:
$ ud > file.txt 2>&1
Ce que j'obtiens, c'est que la commande s'exécute sur la sortie standard à l'écran et qu'un fichier texte de 0 octet est produit. Ce que je souhaite accomplir, c'est créer un fichier texte de sortie similaire à ce qui suit pour ls
:
$ ls > file.txt 2>&1
Puis-je demander à quelqu'un de m'expliquer ce qui se passe?
Enfin, les résultats suivants produisent des résultats que je ne peux pas expliquer:
$ $(ud) > file.txt
La commande « Ign » est introuvable, vouliez-vous dire :
La commande « tgn » du paquet « tgn » (universe)
Ign : commande introuvable
$ echo $(ud) > file.txt
Exécutez la commande dans un sous-shell:
(ud) > file.txt 2>&1
Cela aura les commandes de l'alias ud
à exécuter dans un sous-shell et le STDOUT et le STDERR de toutes les commandes seront dirigés vers le shell parent afin que nous puissions rediriger le STDOUT et le STDERR de toutes les commandes vers le même fichier de notre shell parent à la fois.
Ou, comme @steeldriver l'a suggéré, vous pouvez également définir l'alias comme suit afin que toutes les commandes soient regroupées et que leurs STDOUT et STDERR soient redirigés en même temps:
alias ud='{ Sudo apt-get update && Sudo apt-get upgrade -y && Sudo apt-get dist-upgrade -y && Sudo apt-get clean -y ;}'
Vous pouvez maintenant exécuter la commande en tant que:
ud > file.txt 2>&1
Maintenant, voyons ce que vous faisiez mal:
Vous avez défini l'alias comme:
alias ud='Sudo apt-get update && Sudo apt-get upgrade -y && Sudo apt-get dist-upgrade -y && Sudo apt-get clean -y'
Maintenant que vous exécutez:
ud > file.txt 2>&1
Seul le dernier STDOUT et (ou) STDERR de la dernière commande réussie ou ayant échoué est redirigé vers file.txt
, toutes les commandes précédentes s'exécutent et en fonction du code de sortie de cette commande (succès &&
) la prochaine commande s'exécutera. Donc, dans votre cas, toutes les commandes ont réussi et comme Sudo apt-get clean -y
supprime tous les .deb
fichiers de /var/cache/apt/archives
en silence sans afficher de STDOUT vous obteniez un fichier vide.