Bonjour,

J'ai un petit soucis avec un script que je lance tous les jours avec crontab.
Ce script me permet de compiler un .exe préparamétré de la dernière version de java (pour windows), si nouvelle version il y a...

Seulement, au moment de télécharger java, j'ai un message d'erreur quand le script est lancé en crontab...
voici la partie du code qui me pose problème (j'ai réjouté un echo pour que vous voyez l'état de la variable à la sortie) :
echo "Téléchargement de Java"
lienjava=$(curl -s http://www.java.com/fr/download/manual.jsp | grep -m1 "Windows Hors ligne" | rev | cut -f 2 -d \" | rev)
echo "l'adresse est : $lienjava"
wget -nv $lienjava -o javalog
Manuellement, ce script fonctionne à merveille
$ ./java.sh 
Téléchargement de Java
l'adresse est : http://javadl.sun.com/webapps/download/AutoDL?BundleId=71835
Par contre, en crontab, j'ai cette erreur :
Téléchargement de Java
rev: stdin: Invalid or incomplete multibyte or wide character
l'adresse est : 
wget: missing URL
Usage: wget [OPTION]... [url]...
Try `wget --help' for more options.
Apparemment, c'est le rev qui passe pas...
Bug? J'ai oublié quelque chose?

Merci pour votre aide.

🙂
Bonjour,

je ne comprends pas pourquoi les erreurs font allusion à wget, alors que ton script utilise curl.
Aurais-tu différentes versions du script qui tournent via cron ? Aurais-tu mis à jour ton script pour utiliser curl ?
Salut Pikachu et merci de ta réponse rapide,
Pikachu_2014 wrote:je ne comprends pas pourquoi les erreurs font allusion à wget, alors que ton script utilise curl.
En fait curl récupère la page où se trouvent les liens de téléchargement de java ( http://www.java.com/fr/download/manual.jsp ), puis je lui pipe "grep -m1 "Windows Hors ligne" | rev | cut -f 2 -d \" | rev " pour choper le lien de téléchargement direct de java pour windows (ce lien change au fil des versions de java), que j'insère ensuite dans la variable "lienjava" (je ne sais pas si je suis très clair :/ )

C'est après que je lance wget sur cette variable ($lienjava).
Là on obtient une erreur avec wget car la variable est vide, ce qui veut dire que la commande lienjava=$(curl -s http://www.java.com/fr/download/manual.jsp | grep -m1 "Windows Hors ligne" | rev | cut -f 2 -d \" | rev) échoue quelque part (au "rev" apparemment vu le message : "rev: stdin: Invalid or incomplete multibyte or wide character" ), mais uniquement quand elle est lancée en crontab, car manuellement, ça passe...
Pikachu_2014 wrote:Aurais-tu différentes versions du script qui tournent via cron ? Aurais-tu mis à jour ton script pour utiliser curl ?
Non c'est exactement le même script. J'en ai refait un avec uniquement cette partie du code, à la racine de mon HOME, et pareil, lancé manuellement, ça passe, mais sous cron, rien à faire...
Je te propose de changer ton script comme suit:
#!/usr/bin/env bash
(
set -x
echo "Téléchargement de Java"
lienjava=$(curl -s http://www.java.com/fr/download/manual.jsp | grep -m1 "Windows Hors ligne" | rev | cut -f 2 -d \" | rev)
[ -z "$lienjava" ] && (echo "lien vide"; exit)
echo "l'adresse est : $lienjava"
wget -nv $lienjava -o javalog
) &> /tmp/log
comme ça dans /tmp/log tu auras les détails de son execution
Merci madko 🙂

C'est bien le "rev" qui pose problème :

en cron :
log wrote:+ echo 'Téléchargement de Java'
Téléchargement de Java
++ curl -s http://www.java.com/fr/download/manual.jsp
++ cut -f 2 -d '"'
++ grep -m1 'Windows Hors ligne'
++ rev
++ rev
rev: stdin: Invalid or incomplete multibyte or wide character
+ lienjava=
+ '[' -z '' ']'
+ echo 'lien vide'
lien vide
+ exit
+ echo 'l'\''adresse est : '
l'adresse est :
+ wget -nv -o javalog
wget: missing URL
Try `wget --help' for more options.

Manuellement:
log wrote:+ echo 'Téléchargement de Java'
Téléchargement de Java
++ curl -s http://www.java.com/fr/download/manual.jsp
++ grep -m1 'Windows Hors ligne'
++ rev
++ rev
++ cut -f 2 -d '"'
+ lienjava='http://javadl.sun.com/webapps/download/AutoDL?BundleId=71835'
+ '[' -z 'http://javadl.sun.com/webapps/download/AutoDL?BundleId=71835' ']'
+ echo 'l'\''adresse est : http://javadl.sun.com/webapps/download/AutoDL?BundleId=71835'
l'adresse est : http://javadl.sun.com/webapps/download/AutoDL?BundleId=71835
+ wget -nv 'http://javadl.sun.com/webapps/download/AutoDL?BundleId=71835' -o javalog
Très bisarre... l'ordre des commandes sur le curl sont mélangées... en cron, le cut passe avant le grep, puis suivent les 2 rev, donc ça plante. Et manuellement, le cut passe après le 2eme rev, mais ça n'a pas l'air de gêner... c'est normal? :p
En essayant de définir le LANG dans le script ?
remi wrote:En essayant de définir le LANG dans le script ?
Bingo ! 😃

J'avais pas pensé aux caractères avec accents... le grep chope la ligne avec le mot "Télécharger" ... quel naze...
Tout fonctionne bien, génial !

Merci beaucoup à tous ! 🙂