2010-04-28 12 views
2

L'exécution du script shell ci-dessous semble ignorer le fichier de mot de passe que je charge. Je suis continuellement invité à le faire. Si je l'entre, le reste du script se passe sans accroc, mais comme je le lance via cron, j'ai vraiment besoin de le lire depuis le fichier ... Des suggestions?Le script shell ne récupère pas le fichier de mot de passe ...

#!/bin/sh 
p=$(<password.txt) 
set -- $p 
pass_phrase=$1 
destination="/var/www/d" 
cd /var/sl/ 
for FILE in *.pgp; 
do 
    FILENAME=${FILE%.pgp} 
    gpg --passphrase "$pass_phrase" --output "$destination/$FILENAME" --decrypt "$FILE" 
    rm -f $FILE 
done 

Répondre

0

Vous devez probablement spécifier un chemin d'accès complet au fichier. Ou dans votre travail cron, d'abord cd dans le répertoire contenant ce fichier.

0

Existe-t-il vraiment --passphrase? Selon the manpage ce n'est pas le cas, mais les versions peuvent être différentes.

0

Où se trouve le fichier de mot de passe? cron a un PATH différent, ce qui peut provoquer un comportement différent des scripts lorsque vous les exécutez vous-même.

une solution possible, mettre

cd `dirname $0` 

en haut du script, qui serait cd dans le répertoire du script lors de l'exécution.

Solution possible deux, essayez de spécifier le fichier directement avec un chemin absolu:

gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE" 
1

Votre problème se trouve dans la ligne 2:

p=$(<password.txt) 

Ce que vous faites ici est d'exécuter un « vide commande "dans un sous-shell, en stockant sa sortie dans la variable p. Ce que vous voulez plutôt faire, c'est d'exécuter une commande qui renvoie le contenu du fichier de mot de passe à stdout. Donc:

p=$(cat <password.txt) 

Cela fera l'affaire.