Comment rediriger stderr vers stdout puis pipe (apt-cache)
Oct 29 2020
J'essaye de rediriger stderrvers stdoutet ensuite pipemais je pense qu'il me manque quelque chose de basique ici.
La commande et la sortie à envoyer:
$ apt-cache show contractor
N: Can't select versions from package 'contractor' as it is purely virtual
N: No packages found
Grep ne fonctionne pas - doit sortir vers stderr:
$ apt-cache show contractor |grep virtual
OK Redirigeons-nous stderrvers stdout:
$ apt-cache show contractor 2>&1 |grep virtual
Non, cela ne fonctionne pas, pourquoi?
Confirmez quel descripteur de fichier la commande utilise:
$ apt-cache show contractor 1>t ;cat t
$ apt-cache show contractor 2>t ;cat t
N: Can't select versions from package 'contractor' as it is purely virtual
N: No packages found
Confirmé son utilisation stderr.
Quelque chose à voir avec la commande de redirections?
$ apt-cache show contractor |cat 2>&1
Nan
$ apt-cache show contractor 2>&1 |cat 2>&1
Nan
Comment rediriger stderrvers stdoutalors pipe?
Réponses
5 user414777 Oct 29 2020 at 17:35
C'est parce apt-cachequ'il deviendra "silencieux" et n'imprimera pas ces lignes lorsque sa sortie standard n'est pas un tty.
Vous pouvez ignorer cette détermination en définissant son "silence" sur 0:
$ apt-cache -q=0 show contractor 2>&1 | grep virtual
N: Can't select versions from package 'contractor' as it is purely virtual