Estou executando alguns comandos em uma função. Eu gostaria de fazer logs dele adicionando data e hora para cada saída de comando dessa função. No entanto, no terminal quando executado, quero mostrar apenas a saída normal principal sem data ou hora.
Então, como posso canalizar tudo isso exec 3>&1 1>>${log} 2>&1
via adddate
função como
./script | adddate >>$log
para que eu possa obter date
a saída do meu log em cada linha, mas ao mesmo tempo posso mostrar a saída no terminal.
Não quero mostrar data e hora em tty, quero salvá-los apenas em log. Estou fazendo isso porque quero pegar todos os parâmetros inválidos que podem ter sido passados por usuários em algum momento específico e assim por diante, mas ao mesmo tempo, quero mostrar a saída para o usuário que executou o script para seu tty .
Até agora, cheguei até aqui da seguinte forma:
#!/usr/bin/env bash
log=logs.txt
exec 3>&1 1>>${log} 2>&1 ## works but without date
então eu tentei algo assim mostrado abaixo. Não é muito claro como executá-lo corretamente
3>$1 1>> | adddate ${log} 2>&1 ###(!) doesnt work
exec 3>&1 | adddate 1>> ${log} 2>&1 ###(!) doesnt work
adddate
, main
a função fica assim:
adddate() {
while IFS= read -r line; do
printf "%s %s\n" "$(date)" "$line";
done
}
main()
{
case $arg in
--version)
[[ "$arg2" == "" ]] && { --version; } || { error; } ;;
build)
[[ "$arg2" == "oneshot" ]] && {
build oneshot; } || {
build;
} ;;
update)
[[ "$arg2" == "" ]] && { update; } || { error; } ;;
*)
error
esac
}
arg=$1;
arg2=$2;
shift;
main | tee /dev/fd/3; ## so that it goes to tty, not sure if there is other better way?!?
Então, resumindo: os logs devem ser algo como o seguinte: para cada comando, deve haver a data e a hora gravadas no log antes da saída do comando para uma main
função como
main()
{
printf "Hello\n";
printf "there!\n";
}
o logout deve ser:
Mon Jun 17 20:00:02 JST 2019 Hello
Mon Jun 17 20:00:02 JST 2019 there!
e tty não deve mostrar logs, mas mostrar apenas a saída principal, que é, por exemplo:
Hello
there!
Espero que alguém possa melhorar.
Eu usei
ts
o comando demoreutils
como este primeiro.E sem
ts
:no arquivo de registro:
No tty: