Como criar uma cópia real do stdout e stderr do descritor de arquivos sem usar unbuffer / script / tee apenas com os built-ins do bash?

5

Meu objetivo é duplicar, redirecionar todas as saídas ( stdout e stderr ) de uma saída aplicação ( apt-get ) para um arquivo, mantendo o comportamento usual de o aplicativo ( apt-get ), stdout e stderr .

Como criar uma cópia real do descritor de arquivo stdout e stderr ? Eu gostaria gostaria de manter stdout e stderr como "natural" quanto possível. Ou seja Se fosse correndo por exemplo apt-get , eu gostaria de manter cores e progresso em formação. [1]

Aqui está um exemplo. (O wrapper faz mais coisas, apenas simplificou).

#!/bin/bash

temp_dir="$(mktemp --directory)"
logfile="$temp_dir/log"

unbuffer apt-get "$@" 1> >(tee -a "$logfile") 2> >(tee -a "$logfile" >&2)

É possível arquivar isso sem unbuffer / script / tee apenas com os embutidos do bash?

(Para manter o wrapper mais simples e dependente de menos binários externos. Caso contrário, isso pode causar conflitos com o controle de acesso obrigatório e assim por diante.)

(O uso de script (1) em scripts não interativos é desencorajado por sua página de manual.)

[1]

22% [8 Packages 3,449 kB/7,098 kB 49%]
174 kB/s 4min 57s
    
por adrelanos 27.02.2017 / 20:56

0 respostas