[Bash] Variable $USER et CronTab

Résolu
Bonjour,

Débutant dans le script bash, j'arrive grosso-modo à mes fins. Sauf que je bloque sur un point.

Je copie des répertoires utilisateurs et j'utilisais une variable $USER pour ne pas avoir à rentrer le nom complet. ( exemple /home/$USER/RepAcopier ).

Quand j'excute le script de depuis la session celà fonctionne, seulement quand je passe avec CronTab , il ne prends pas en compte la variable $USER. Cela me semble normal, mais je ne vois pas comment evincer le problème.

Est ce ma façon de faire qui n'est pas bonne, ou existe t'il une solution à mon problème ?

En vous remerciant d'avance ,

ps: voici mon petit script.

#!/bin/bash 

if [ -e "/home/$USER/baseDuJour/bases_$(date +%k)h.zip" ] 
then 
 rm /home/$USER/baseDuJour/bases_$(date +%k)h.zip 
fi
zip -r /home/$USER/baseDuJour/bases_$(date +%k)h.zip /home/$USER/temp/* 
rm /home/$USER/temp/*


Je ne suis pas un geek, juste un humain 2.0
~~ Cr3u7z0u ~~

3 réponses

  1. Bonjour à vous deux,

    Merci pour vos précisions. Je vais mettre ça en application de suite. Et je reviens vous donner des news.
    1. Contributeur
      hello
      USER n'est pas défini dans cron mais LOGNAME est défini
      1. Modérateur
        Pour commencer je te conseille d'utiliser $HOME plutôt que $USER, car le home n'est pas forcément dans /home (par exemple pour root, c'est /root). Ensuite, il faut voir si quand tu lances crontab, ces variables d'environnement sont initialisées comme tu le crois. Tu peux par exemple lancer dans ton script :

        echo "USER=[$USER]" > /tmp/toto.txt


        ... pour être fixé.

        En admettant que ton utilisateur soit toto, comme il y a peu de chance que crontab soit lancé par toto, il y a peu de chance que $USER (resp. $HOME) soit initialisé à la valeur que tu espères.

        Sous linux chaque utilisateur est identifié par un UID (entier indiqué dans /etc/passwd), et l'utilisateur "principal" sous ubuntu correspond en général à l'utilisateur 1000. Tu peux donc dans ton script bash récupérer le nom de l'utilisateur et son home associés à l'UID 1000 comme suit :

        #!/bin/bash   
        
        UID=1000  
        USER=$(cat /etc/passwd | cut -d":" -f1,3,6 | grep 1000 | cut -d":" -f1)
        HOME=$(cat /etc/passwd | cut -d":" -f1,3,6 | grep 1000 | cut -d":" -f3)
        
        #suite de ton script


        Bonne chance