Aller au contenu
View in the app

A better way to browse. Learn more.

Next

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[BASH] Execution d'une commande dans une variable

Featured Replies

Posté(e)

Bonjour à tous.

Je rencontre un problème avec une fonction BASH dont voici le code :

function dateformat {

typeset -i RESULT=255

FORMAT=${1:-''}

COMMAND="/usr/local/bin/date +$FORMAT"
THE_DATE=`$COMMAND`
RESULT=${?}

if [[ ${RESULT} -ne 0 ]]; then

	echo -e "In file ${BASH_SOURCE} at line ${LINENO}: Failed to format date using command '${COMMAND}'."

else

	echo "${THE_DATE}"

fi

return ${RESULT}

}

J'exécute ensuite la fonction via ces deux lignes :

dateformat '%Y'

dateformat '%Y %d'

Dans le 1er cas, ca fonctionne correctement. Par contre dans le 2ème cas, le %d après l'espace est interpréré comme étant un second argument...

J'ai également testé avec l'appel suivant :

dateformat "'%Y %d'"

Sans succès... Y-a-t'il quelq'un pour m'aider ?

Merci bien :keskidit:

Posté(e)

Et si tu utilises dans ton script $@ ou $* ca n'irait pas mieux?

J'avoue que je ne sais plus lequel est celui qui donne tous les arguments mais je crois que c'est $*

Posté(e)
  • Auteur

Et si tu utilises dans ton script $@ ou $* ca n'irait pas mieux?

J'avoue que je ne sais plus lequel est celui qui donne tous les arguments mais je crois que c'est $*

Merci, je vais tester.

La différence entre $@ et $* est subtile : Si tu fait "$*" tu as une string contenant tous les parametres d'une fonction (ou d'un script), espacée du premier caractère de la variable d'environement $IFS et entourée du caractère ". Tandis que "$@" te donne n strings entourées du caractère ", avec n étant le nombre de paramètres de la fonction / script.

Posté(e)
  • Auteur

Arf, ça ne fonctionne pas mieux. Vois les traces de debug :

+ DATE=/usr/local/bin/date
+ dateformat '%Y %d'
+ typeset -i RESULT=255
+ FORMAT='%Y %d'
+ COMMAND='/usr/local/bin/date +%Y %d'
++ /usr/local/bin/date +%Y %d
/usr/local/bin/date: extra operand `%d'
Try `/usr/local/bin/date --help' for more information.
+ THE_DATE=
+ RESULT=1
+ [[ 1 -ne 0 ]]
+ echo 'In file ./main.bash at line 42: Failed to format date using command '\''/usr/local/bin/date +%Y %d'\''.'
In file ./main.bash at line 42: Failed to format date using command '/usr/local/bin/date +%Y %d'.
+ return 1
+ exit

Celle là c'est quand j'appelle la fonction avec le parametre '%Y %d'

+ DATE=/usr/local/bin/date
+ dateformat ''\''%Y %d'\'''
+ typeset -i RESULT=255
+ FORMAT=''\''%Y %d'\'''
+ COMMAND='/usr/local/bin/date +'\''%Y %d'\'''
++ /usr/local/bin/date '+'\''%Y' '%d'\'''
/usr/local/bin/date: extra operand `%d\''
Try `/usr/local/bin/date --help' for more information.
+ THE_DATE=
+ RESULT=1
+ [[ 1 -ne 0 ]]
+ echo 'In file ./main.bash at line 42: Failed to format date using command '\''/usr/local/bin/date +'\''%Y %d'\'''\''.'
In file ./main.bash at line 42: Failed to format date using command '/usr/local/bin/date +'%Y %d''.
+ return 1
+ exit

Et là c'est quand j'appelle la fonction avec le parametre "'%Y %d'"

En fait dans le premier cas, on vois bien que l'espace du paramètres est interprété comme un second paramètre. Et dans le 2ème cas, les ' utilisées pour regrouper les deux parties du paramètre sont "echapées" donc non interprétées. Vraiment étrange...

Posté(e)

Bonjour à tous.

Je rencontre un problème avec une fonction BASH dont voici le code :

	FORMAT=${1:-''}

COMMAND="/usr/local/bin/date +$FORMAT"
THE_DATE=`$COMMAND`

Ça fonctionne en remplaçant par ça :

  RESULT=`/usr/local/bin/date +"$1"`

Pourquoi, je n'en sais rien exactement. Possible que ce soit à cause des imbrications de quotes.

++ /bin/date '+%Y %d'
++ /bin/date '+"%Y' '%d"'

On voit bien la différence.

Hors sujet : Tu l'as recompilé ton date ?

Posté(e)
  • Auteur

Merci pour ta réponse.

En fait je souhaite avoir une variable pour stocker une commande pour pouvoir soit l'afficher, soit l'exécuter. Je souhaite utiliser une variable afin d'eviter d'avoir deux fois la commande car ça veux dire pense à modifier les deux endrois lors d'une mise à jour -> 99% de chance d'oublier...

Note: Je n'ai pas recompilé date, je travaille sous Solaris 8 sur lequel est installé les outils GNU dans /usr/local/bin en plus des outils POSIX Unix dans /usr/xpg4/bin. Comme je souhaite assurer la portabiliter vers Linux j'utilise les outils GNU (qui offrent par ailleurs bien plus de possibilitées)

Posté(e)
  • Auteur

J'ai trouvés un moyen de contournement. C'est pas très joli, mais ça fonctionne.

En fait je replace les espaces du format de la date par l'equivalent en héxa. Cette valeur n'est ensuite interprétée que par la commande echo et pas par par la commande date.

dateformat '%Y\x20%d'

PS: Bien sûr il ne faut pas non plus oublier de spécifier le paramètre -e à la commande echo, sinon le caractère l'echapement \x n'est pas interprété...

Posté(e)
Note: Je n'ai pas recompilé date, je travaille sous Solaris 8 sur lequel est installé les outils GNU dans /usr/local/bin en plus des outils POSIX Unix dans /usr/xpg4/bin. Comme je souhaite assurer la portabiliter vers Linux j'utilise les outils GNU (qui offrent par ailleurs bien plus de possibilitées)
Tu m'étonnes...

Plus il y a de gnu, moins on est emmerdé :yes:

Moi aussi je met plein de gnu sur les solaris :smack:

J'ai trouvés un moyen de contournement. C'est pas très joli, mais ça fonctionne.

En fait je replace les espaces du format de la date par l'equivalent en héxa. Cette valeur n'est ensuite interprétée que par la commande echo et pas par par la commande date.

dateformat '%Y\x20%d'

PS: Bien sûr il ne faut pas non plus oublier de spécifier le paramètre -e à la commande echo, sinon le caractère l'echapement \x n'est pas interprété...

Pas bête.

Dans ce cas puis-je te suggérer un

FORMAT=$(echo ${1:-''} | sed 's/ /\\x20/g')

Histoire de ne pas avoir à le faire pour chaque appel.

EDIT : copier coller.

Posté(e)

No prolbem.

Tu sais que tu n'es pas obligé de tout citer à chaque fois, ça fait un peu lourd pour un post où tu ne fais que rajouter deux lignes. :chinois:

Sinon 8);)

EDIT : un peu de ménage.

Posté(e)
  • Auteur

Tu sais que tu n'es pas obligé de tout citer à chaque fois, ça fait un peu lourd pour un post où tu ne fais que rajouter deux lignes. :chinois:

Gomen... je le ferais plus :/

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.