HS: petite question bash et variable en argument d'une commande
Le
Jérémy Prego

Bonjour,
Quelque chose que je pensais simple s'avère plus compliqué que prévu. Je
souhaite utiliser un argument de la commande date que je positionne en
variable. Cela me permet de pouvoir initialiser la variable ou non selon
le cas. sauf que ça fonctionne pas vraiment.
extrait de mon test:
#!/bin/bash
day_date="--date='1 days ago'"
date ${day_date} "+%A %d %B"
En gros, quand la variable est initialisé, ça m'affiche la date d'hier
au lieu de la date d'aujourd'hui. sauf que ça ne fonctionne pas
vraiment, j'ai un peu tout essayé des exemples pris sur stackoverflow
avec ma variable sous forme de tableau, en testant avec eval, mais rien
Í faire.
merci Í vous pour le coup de main.
Jerem
Quelque chose que je pensais simple s'avère plus compliqué que prévu. Je
souhaite utiliser un argument de la commande date que je positionne en
variable. Cela me permet de pouvoir initialiser la variable ou non selon
le cas. sauf que ça fonctionne pas vraiment.
extrait de mon test:
#!/bin/bash
day_date="--date='1 days ago'"
date ${day_date} "+%A %d %B"
En gros, quand la variable est initialisé, ça m'affiche la date d'hier
au lieu de la date d'aujourd'hui. sauf que ça ne fonctionne pas
vraiment, j'ai un peu tout essayé des exemples pris sur stackoverflow
avec ma variable sous forme de tableau, en testant avec eval, mais rien
Í faire.
merci Í vous pour le coup de main.
Jerem
Le 22/03/2021 Í 07:46, Jérémy Prego a écrit :
C'est day_date=`date --date='1 day ago'
--
Daniel
c'est parce que tu quote quote, ma poule.
day_date='--date=1 days ago'
date "$day_date" '+%A %d %B'
par contre naturellement j'aurais plus noté
date -d-1day '+%A %d %B'
a+
marc
Manque la backquote, désolé
day_date=`date --date='1 day ago'`
non mais même:
* je pige pas l'interet de préparer un argument de date en évaluant
une sortie de date
* en plus sous la forme ou tu l'écris c'est fragile parce que
# LANG= date -d-1day
Sun Mar 21 09:24:24 CET 2021
# date -d'Sun Mar 21 09:24:24 CET 2021'
dim. 21 mars 2021 09:24:24 CET
# date -d'dim. 21 mars 2021 09:24:24 CET'
date: date «Â dim. 21 mars 2021 09:24:24 CETÂ » incorrecte
pour moi l'intention était de préparer l'argument
--date=1 day ago
qui peut se noter comme ceci
--date=1 day ago
--date='1 day ago'
'--date=1 day ago'
sauf que si je met des quotes dans les quotes
"--date='1 day ago'"
j'obtiens
--date='1 day ago'
belle journée
marc
Merci pour cette affection ! :D
merci beaucoup pour le paramètre
-d-1day ça fonctionne parfaitement avec ce que je veux faire. si la variable est initialisé, il prends la veille sinon il prend le jour même.
Jerem
#!/bin/bash
day_date="--date=1 day ago"
date "${day_date}" "+%A %d %B"
--
Fabrice Bauzac-Stehly
PGP 01EEACF8244E9C14B551C5256ADA5F189BD322B6
old PGP 015AE9B25DCB0511D200A75DE5674DEA514C891D
Comme indiqué de manière très détaillée sur https://mywiki.wooledge.org/BashFAQ/050Â (désolé c'est en anglais), stocker des commandes dans des variables est très hasardeux.
La façon la moins risquée est de passer par un tableau (d'ailleurs t'avais évoqué l'idée dans ton message initial).
Pour ton cas, ça donne donc :
date_args=( --date="1 days ago" )
date "${date_args[@]}" "+%A %d %B"
Bien cordialement,
l0f4r0
(désolé c'est en anglais), stocker des commandes dans des variables est très hasardeux.
je ne lit plus jamais qu'en diagonale toute litterature spécifique Í
bash mais oui: les choses sont compliquées voir impossibles dans une
chaine. par contre ...
non! déjÍ : le seul tableau que posix connaisse est $@ donc
date_args=( --date="1 days ago" )
date "${date_args[@]}" "+%A %d %B"
nécessite au moins mksh pour être lu. et si tu utilises plus gros: je te
conseille de passer tout de suite du coté de zsh mais rien ne justifie
de sortir un veau comme bash dans le cas présent.
ensuite: la façon la moins risquée s'appelle une fonction et c'est même
fait pour. ca permet de surcroit de profiter
* de la localisation des variables dans le contexte de la fonction.
* du paramétrage d'une valeur par défaut
exemple:
mydate () date -d"${1:--1day}" '+%A %d %B'
mydate
mydate tomorrow
me donne
mercredi 24 mars
vendredi 26 mars
autre manière de faire pour éviter le quoting hell: xargs
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html
date=tomorrow
# des trucs ...
<<. xargs -d'n' date
-d ${date:--1day}
+%A %d %B
.
xargs prend aussi un fichier, du coup tu peux composer ta commande
petit Í petit
exec 9>/tmp/mydate
exec 9>&-
xargs -a /tmp/mydate -d'n' date
hth
bonne journée
marc
25 mars 2021, 09:02 de :
Je parlais du cas o͹ l'on souhaiterait absolument passer par une variable. Vaut mieux le tableau que la chaͮne.
Nous sommes en phase sur la fonction.
Merci, ça m'a fait réviser xargs et les redirections/descripteurs de fichiers non standards ;)
25 mars 2021, 19:14 de :
Oui, ce cours est vraiment top je trouve.
Je l'avais massivement utilisé Í mes débuts en bash !
Bonne fin de journée
l0f4r0