apt
foi projetado historicamente com o uso interativo de linha de comando em mente, daí o aviso codificado, que foi feito intencionalmente em / por apt
e não pelo shell.
No entanto, apt
não está necessariamente analisando a linha de comando; o shell já fez esse trabalho no momento em que chama apt
. O que o apt
está fazendo é detectar que o fluxo stdout
foi alterado / redirecionado.
Quanto ao uso de apt
em scripts, você tem o comando anterior mais antigo apt-get
, que faz mais ou menos a mesma coisa, e não fornece esse aviso quando stdout
é redirecionado.
TLDR Não é o shell que está gravando a mensagem de erro em stderr
, é o comando apt
.
O fato de você ser capaz de capturar a saída apt
stderr
no shell é um artefato do Unix sendo um sistema operacional multitarefa, e não significa que seja o shell que produz essa saída.
PS. Fazendo um strace no comando, pode ser visto apt
escrevendo essa mensagem:
strace apt get install bash > a
....
write(2, "\n", 1
) = 1
write(2, "WARNING: ", 9WARNING: ) = 9
write(2, "apt", 3apt) = 3
write(2, " ", 1 ) = 1
write(2, "does not have a stable CLI inter"..., 38does not have a stable CLI interface. ) = 38
write(2, "Use with caution in scripts.", 28Use with caution in scripts.) = 28
write(2, "\n", 1
) = 1
write(2, "\n", 1
) = 1