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