problème avec le tild en bash

Bonjour à tous,
Je viens de m’apercevoir que j’ai un problème avec mon bash. Je n’arrive pas à “avoir accès” à mon répertoire perso gràce au tild ~ Voici un exemple:

mais ceci uniquement dans les scripts!!! quand je le fais dans stjerm ça fonctionne, mais si je lance ce simple script toujours dans stjerm, ça ne fonctionne pas:

#!/bin/bash
nom_image="~/Images/Wallpapers/M42_1.jpg"
temp=$(stat -c%s $nom_image)
echo " +-> $temp"

exécution:

$ bash ./teste.sh 
stat: impossible d'évaluer «~/Images/Wallpapers/M42_1.jpg»: Aucun fichier ou dossier de ce type
 +-> 

Second essai, j’ai modifié le script avec le nom complet du chemin en dur :
/home/remi/Images/Wallpapers/M42_1.jpg

$ bash ./teste.sh 
 +-> 3823145

Comment ça ce fait, que cela fait ça?

Pour information, je démarre ma session sans gestionnaire de mot de passe graphique (ni gdm, ni xdm, …), mais grâce à mingetty puis .bash_profile .
Aurais-je oublié une quelconque initialisation?

Rémi.

“~”
~
~ n’est pas interprété, il vaut littéralement ~.

Les guillemets neutralisent l’expansion de ~.

Que tu n’obtiennes pas de réponse avec
$ cd ~/Images/
ça semble bizarre.
Que ça ne fonctionne pas à l’intérieur d’un script, c’est plus courant.
En dehors de ce qu’a déjà dit etxeberrizahar concernant les guillements.

@ricardo
Il dit que le problème n’est que dans le script.

Sinon comme dit plus haut. C’est les guillemet qui empêche son job, avec \ devant tild tu résoudras le problème.

ah, oui, j’avais pas pensé à ça!
un caractère comme le " j’aurais pensé à l’échapper, mais le tild, je n’y ai pas pensé!

Merci vraiment beaucoup !

Ceci dit, je ne met pas tout de suite en résolu, je vais faire des tests, puis je posterai la solution (pour la postérité)!

\ devant tildE échappe ~ .
Tu n’obtiendras que ~ sans expansion tout comme “~”.

Lance une console et compare

$ ls ~
$ ls “~”
$ ls “~”

et

$ ls ~
$ ls $HOME
$ ls “$HOME”
$ ls /home/$USER
$ ls “/home/$USER”

Remplace ~ par $HOME ou “$HOME”"/home/$USER"

Merci, j’ai effectivement testé ce week end, et la bone réponse était d’utiliser $HOME

Donc, mon script de test se résume à

#!/bin/bash
nom_image="$HOME/Images/Wallpapers/M42_1.jpg"
temp=$(stat -c%s $nom_image)
echo " +-> $temp"

Grand grand merci!
Pour information, ceci n’était qu’un petit exemple, mais à la base, j’ai un script qui doit aller chercher la page suivante: apod.nasa.gov/apod/ap"$(date +%y)$(date +%m)$(date +%d)".html
puis dans cette page récupérer l’image du jour pour en faire le fond d’écran de l’ordinateur de mon fils. Ceci explique (un peu) le répertoire ‘$HOME/Images/Wallpapers’

Rémi.

Hey, ça m’a l’air bien sympa comme idée de fond d’écran dynamique ! :023
Tu voudras bien poster ton script fini ici ?

je pensais le poster dans la section "les scripts, c’est ici"
Mais oui, je peux ici quand même!!! c’est ‘fini’ en tout cas, ça marche, mais c’est améliorable.
Je vais chercher la page de base (avant l’image) et je regarde si j’ai l’image. Mais cela me fait recharger la page à chaque fois. Ça me plaît pas de trop. Mais j’ai fait ça sur un bout de table.
Voila le code:

#!/bin/bash
# -------------------------------------------------------------------------
# image en fond d'écran avec nitrogen renouvelable tous les jours 
# Utilisation:
# placer le script dans /usr/local/bin
# chmod +x /usr/local/bin/change_walpaper3.sh
# installer la crontab sans oublier l'export du DISPLAY:
# 0 * * * * export DISPLAY=:0.0 && /usr/local/bin/change_walpaper3.sh
# la cron tab est évaluée toutes les heures. Je ne sais pas quand la nasa renouvelle son image.
# -------------------------------------------------------------------------
# chaque jour, une image nouvelle!
# http://apod.nasa.gov/apod/ap120917.html
# l'image est dans la page html la date est dans le nom de la page: 120917 -> 17 septembre 2012 
# la page de base est récupérée, puis on regarde si l'image est déjà présente. si c'est le cas, on s'arrete la.
# En cas d'erreur, je bascule sur un script qui récupère un autre fond d'écran.
# -------------------------------------------------------------------------
# R. Suinot <remi@suinot.org> le 01 Oct 2012
# -------------------------------------------------------------------------

log="/tmp/change_walpaper3.log"
fichier_temporaire="/tmp/page_temporaire.html"
dossier_images="$HOME/Images/Wallpapers/"
adresse="http://apod.nasa.gov/apod/"
adresse_page="http://apod.nasa.gov/apod/ap"$(date +%y)$(date +%m)$(date +%d)".html"
# adresse_page="http://apod.nasa.gov/apod/ap120917.html"

heure=$(date +%y)$(date +%m)$(date +%d)

wget $adresse_page -O $fichier_temporaire
temp=$(stat -c%s $fichier_temporaire)
if [[ $temp > 1000 ]]
then
  echo "$(date) -> $temp" >> $log
  # j'ai récupéré la page du jour, il faut trouver l'image incluse dedans, à présent!
  image_du_site=$( grep "IMG SRC" $fichier_temporaire | cut -d \" -f 2)
  image_locale=$( cut -d / -f3 <<< $image_du_site)
  adr_image=$adresse$image_du_site
  echo " +-> image= $adr_image." >> $log
  echo " +-> image source= $image_du_site." >> $log
  echo " +-> image destination= $image_locale." >> $log
  cd $dossier_images
  if [[ -e $image_locale ]]
  then
    echo "déjà changé" >> $log
  else
    wget $adr_image -O $image_locale
    temp=$(stat -c%s $image_locale)
    echo " +-> $temp" >> $log
    if [[ $temp > 1000 ]]
    then
      rm world_sunlight_Wallpaper.jpg
      mogrify -fill white -pointsize 16 -annotate +5+820 "$heure" $image_locale
      cp $image_locale world_sunlight_Wallpaper.jpg
      nitrogen --restore
      echo " +-> ok!" >> $log
    else
      echo " +-> Pas de nouvelle image, chargement de la météo" >> $log
      /bin/bash ~/bin/change_walpaper2.sh
    fi
  fi
  rm $fichier_temporaire
else
  echo " +-> Pas de nouvelle image, chargement de la météo" >> $log
  /bin/bash ~/bin/change_walpaper2.sh
fi
echo "---- fin de cession ------" >> $log

le fichier de log dans /tmp/ en fait, c’est juste pour voir ce qu’il ce passe en cas de soucis, ce peut être enlevé.

Toute(s) solution(s)/optimisation(s) est(sont) acceptées à la condition d’expliquer la manip. J’ai eu du mal avec cette ligne, par exemple:
image_locale=$( cut -d / -f3 <<< $image_du_site)

Et comme je suis gentil, je vous donne une seconde adresse pour des images, cette fois ci, c’est une page avec l’image directement: opentopia.com/images/cams/wo … ngular.jpg
je pense que ça vaudrait le coup de récupérer toute les heures ou deux heures, sur un mois, puis faire une animation, mais je ne me suis jamais (pas encore) lancé.

edit: le nom de fichier world_sunlight_Wallpaper.jpg est utilisé pour image de fond d’écran, car c’était celui utilisé de base par mon fils. Nitrogen le réutilise à chaque fois avec la commande --restore on aurait pu utiliser un autre nom, mais la facilité …

Cordialement.
Rémi.