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
Tags stdout tee scripting stderr shell-script