Exécutez une commande et mettez les résultats dans une variable … tout dans un script bash

Je travaille sur un script bash qui sauvegarde un fichier de configuration avant de copier sur un nouveau fichier.

Voici à quoi ressemble mon extrait:

mv ~/myStuff.conf ~/myStuff.conf.bak cp ~/new/myStuff.conf ~/myStuff.conf 

Chaque fois que ce script est exécuté, j'aimerais qu'il y ait la sauvegarde pour avoir un timestamp Unix dans le nom de fichier. J'ai essayé ceci

 DATEVAR=date +%s mv ~/myStuff.conf ~/myStuff.conf.$DATEVAR.bak 

Mais cela ne fonctionne pas, puisque la fonction de date ne s'exécute pas et bash le voit en tant que chaîne, et le fichier résultant finit par être

 myStuff.conf.date+%s.bak 

Des idées sur la façon d'obtenir les résultats de la fonction de date en une variable?

Ceci est possible avec la substitution de commande .

 DATEVAR=$(date +%s) 
 --[[z4us|binz--]] export datevar=`date` # date embedded in backquotes --[[z4us|binz--]] echo $datevar Lun 25 Gen 2016 15:56:14 CET 

Ceci ne répond pas à la variable contenant la sortie d'une commande. Cela a déjà été répondu. En ce qui concerne le reste de votre script d'exemple;

Une version un peu plus courte:

 mv ~/myStuff.conf ~/myStuff.conf.$(date +%s) 

Il n'est pas nécessaire de définir une variable pour quelque chose dont vous avez besoin ou ne l'utilisez qu'une seule fois. De plus, pour être compatible avec plus de shells, vous pouvez également utiliser cette syntaxe:

 mv ~/myStuff.conf ~/myStuff.conf.`date +%s` 

Il me semble simplement qu'avoir le datestamp comme extension élimine le besoin de la .bak supplémentaire dans le nom de fichier.