[Bash] Variable $USER et CronTab

Résolu/Fermé
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 - Modifié par Creutzou le 18/10/2012 à 12:05
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 - 19 oct. 2012 à 09:36
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

mamiemando Messages postés 32945 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 février 2024 7 720
Modifié par mamiemando le 18/10/2012 à 13:11
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
0
dubcek Messages postés 18709 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 16 février 2024 5 612
18 oct. 2012 à 14:31
hello
USER n'est pas défini dans cron mais LOGNAME est défini
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
19 oct. 2012 à 09:36
Bonjour à vous deux,

Merci pour vos précisions. Je vais mettre ça en application de suite. Et je reviens vous donner des news.
0