J'ai une fonction zsh qui met à jour mon système (.deb
paquets, pip
paquets, paquets texlive, ...).
Cela ressemble à ceci:
up() {
emulate -LR zsh
[[ -d "${HOME}/log" ]] || mkdir "${HOME}/log"
LOGFILE="${HOME}/log/update_system.log"
__update_system 2>&1 | tee -a "${LOGFILE}"
}
La dernière ligne appelle la fonction __update_system
et dirige sa sortie vers tee
, qui doit à son tour afficher la sortie sur le terminal et l'ajouter à un fichier afin que je puisse l'examiner ultérieurement si quelque chose se passe. faux.
Une des commandes exécutées par __update_system
est:
$ apt-file update
Il semble être exécuté, mais sa sortie n'est pas enregistrée dans le fichier. Toutes les autres commandes (y compris aptitude update
) sont consignées.
J'ai essayé de comprendre en exécutant cette commande dans un shell:
$ apt-file update >/tmp/log
Encore une fois, apt-file update
semble être exécuté, mais la sortie n'est pas consignée car /tmp/log
est vide.
Je pensais que peut-être la sortie est envoyée sur l'erreur standard, alors j'ai essayé:
$ apt-file update >/tmp/log 2>&1
Mais j'ai le même résultat, un fichier vide.
J'ai essayé à Bash, ce qui m'a également donné un fichier vide.
Voici quelques détails sur mon système:
$ uname -a
Linux ubuntu 4.4.0-135-generic #161-Ubuntu SMP Mon Aug 27 10:45:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
À propos de zsh:
$ zsh --version
zsh 5.5.1-dev-0 (x86_64-pc-linux-gnu)
À propos de bash:
$ bash --version
GNU bash, version 4.4.0(1)-release (x86_64-unknown-linux-gnu)
À propos de apt-file
:
$ aptitude show apt-file
Package: apt-file
State: installed
Automatically installed: no
Version: 2.5.5ubuntu1
Priority: optional
Section: universe/admin
Maintainer: Ubuntu Developers <[email protected]>
Architecture: all
Uncompressed Size: 92,2 k
Depends: Perl, curl, libconfig-file-Perl, libapt-pkg-Perl, liblist-moreutils-Perl, libregexp-assemble-Perl,
libfile-temp-Perl
Suggests: openssh-client, Sudo
Description: search for files within Debian packages (command-line interface)
apt-file is a command line tool for searching files contained in packages for the APT packaging system. You can search
in which package a file is included or list the contents of a package without installing or fetching it.
Comment rediriger la sortie de apt-file update
dans un fichier?
apt-file
est un script Perl./dev/tty
et non à stdout
(la différence est expliquée sur ceci SO réponse )Soooo ... cela va enregistrer la sortie sur logfile.log
script -c "apt-file update" logfile.log