Anexa o registro de data e hora atual no nome dos arquivos do comando de execução em segundo plano

4

A seguir, o comando que usei no script bash e é executado em segundo plano:

sshpass -p prakash12 ssh -t -p  prakash@localhost './test_new_update_script.sh > /home/log/unit_update_output.log 2> /home/log/unit_update_error.log < /dev/null | echo $! > /home/log/unit_update_pids &'

Este comando criou três arquivos em tempo de execução, por exemplo, unit_update_output.log , unit_update_error.log e unit_update_pids . E imprima as informações relacionadas. nesses arquivos.

Eu quero acrescentar o current timestamp no final de cada nome de 3 arquivos.

Como: unit_update_output-2014-04-08T22-15-02.log "2014-04-08T22-15-02" este é o timestamp atual.

O comando acima está sendo executado em segundo plano:

Então, como posso fazer isso?

    
por Prakash V Holkar 08.04.2014 / 18:48

1 resposta

4

Se o comando é em segundo plano ou não é irrelevante, tudo que você precisa fazer é adicionar a saída de uma chamada date aos nomes de arquivo que você está criando. Usando exatamente a mesma sintaxe da sua pergunta, você poderia fazer:

sshpass -p prakash12 ssh -t -p  prakash@localhost \
    './test_new_update_script.sh > /home/log/unit_update_output.$(date '+%F-%T').log \
     2> /home/log/unit_update_error.$(date '+%F-%T').log < /dev/null | 
     echo $! > /home/log/unit_update_pids$(date '+%F-%T') &'

O truque é adicionar $(date '+%F-%T'). , isso retornará (por exemplo):

$ date '+%F-%T'
2014-04-08-18:54:52

Então, o comando acima criará:

/home/log/unit_update_output.2014-04-08-18:57:02.log 
/home/log/unit_update_error.2014-04-08-18:57:02.log 
/home/log/unit_update_pids2014-04-08-18:57:02

Veja man date para os diferentes formatos que você pode ter.

    
por terdon 08.04.2014 / 18:57