web-dev-qa-db-fra.com

Ajouter l'horodatage actuel sur le nom de fichier à partir de la commande en cours d'exécution en arrière-plan

Voici la commande que j'ai utilisée dans le script bash et qui s'exécute en arrière-plan:

sshpass -p prakash12 ssh -t -p $1 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 &'

Cette commande a créé 3 fichiers au moment de l’exécution, à savoir unit_update_output.log, unit_update_error.log et unit_update_pids. Et imprimez les informations correspondantes. dans ces fichiers.

Je veux ajouter le current timestamp à la fin de chaque nom de 3 fichiers.

Comme: unit_update_output-2014-04-08T22-15-02.log "2014-04-08T22-15-02" c'est l'horodatage actuel.

La commande ci-dessus s'exécute en arrière-plan:

Alors, comment puis-je faire cela?

4
Prakash V Holkar

Que la commande soit en arrière-plan ou non importe peu, il vous suffit d'ajouter le résultat d'un appel date aux noms de fichiers que vous créez. En utilisant exactement la même syntaxe que dans votre question, vous pouvez faire:

sshpass -p prakash12 ssh -t -p $1 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') &'

L'astuce consiste à ajouter $(date '+%F-%T')., ceci retournera (par exemple):

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

Donc, la commande ci-dessus va créer:

/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

Voir man date pour les différents formats que vous pouvez avoir.

4
terdon