1 votes

Exécuter une commande et mettre les résultats dans une variable... le tout dans un bash script.

Je travaille sur un bash script qui sauvegarde un fichier de configuration avant de copier 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 que la sauvegarde ait un timestamp unix dans le nom du fichier. J'ai essayé ceci

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

Mais cela ne fonctionne pas, car la fonction date ne s'exécute pas et bash la voit comme une chaîne de caractères, et le fichier résultant finit par être

myStuff.conf.date+%s.bak

Avez-vous des idées sur la façon d'obtenir les résultats de la fonction date dans une variable ?

5voto

Lark Points 1640

Cela est possible avec substitution de commande .

DATEVAR=$(date +%s)

1voto

Afe Points 151
--[[z4us|binz--]]

export datevar=`date` # date embedded in backquotes

--[[z4us|binz--]]

echo $datevar

Lun 25 Gen 2016 15:56:14 CET

1voto

Daniel Liston Points 336

Cela ne répond pas à la question de la variable contenant la sortie d'une commande. Cette question a déjà été traitée. Quant au reste de votre exemple script ;

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 n'avez besoin ou que vous n'utilisez qu'une fois. En outre, pour être compatible avec d'autres shells, vous pouvez également utiliser cette syntaxe :

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

Il me semble simplement que le fait d'avoir l'horodatage comme extension élimine la nécessité d'ajouter un .bak dans le nom du fichier.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X