Estou tentando executar bash script
diariamente um arquivo de log.
#!/bin/bash
exec 3>&1 4>&2
trap 'exec 2>&4 1>&3' 0 1 2 3
exec 1>logfile.output 2>&1
(
OSS_NAME=$1
present_date="`date +"%Y-%m-%d-%H-%M-%S"`"
echo -e "\033[0;36mpresent_date:\033[0m $present_date"
) | tee -a /home/eksinvi/output/pm/NSN/NFV/InterfaceStatistics/logs/$OSS_NAME-logfile-$present_date-output
bash test.sh "Interface"
Espero que cada vez que ele crie um novo arquivo de log e tenha um nome dinâmico com data e nome da variável de entrada.
Interface-logfile-2024-06-06-20-47-36-output
Retire o subshell
(
e)
(que cria um processo filho do script). Remova também as aspas extras ao redor dodate
comando:A variável
$present_day
estava sendo preenchida com a string de data/hora no processo filho (o subshell), mastee
no processo pai precisava do valor para criar o nome do arquivo com carimbo de data/hora. Os processos filhos podem herdar os valores das variáveis dos processos pais, mas os pais não podem herdar dos filhos. Minha versão acima faz as duas coisas no mesmo processo.Se o
echo
comando aqui for apenas uma versão de teste e seu objetivo for ter vários comandos em um subshell que sejam canalizados para tee, inicie o subshell depois que a$present_date
variável for preenchida. Os comandos do subshell terão o valor disponível para eles, assim como otee
comando do processo pai.Também removi a troca do descritor de arquivo no início do script, porque
tee
grava em seu stdout, bem como no arquivo em seu-a
argumento, e a troca do descritor de arquivo estava redirecionando isso para ologfile.output
arquivo no diretório atual, o que você provavelmente não faz. querer.