2010-04-28 44 views
2

运行下面的shell脚本似乎忽略了我喂它的密码文件。我不断被提示。如果我输入它,脚本的其余部分顺利运行,但是当我通过cron运行它时,我真的需要从文件中读取它......任何建议?Shell脚本没有拿起密码文件...

#!/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 

回答

0

您可能需要指定文件的完整路径。或者在你的cron作业中,首先cd到包含该文件的目录。

0

--passphrase确实存在吗?根据the manpage它不,但版本可能会有所不同。

0

密码文件在哪里? cron有不同的PATH,这可能会导致脚本在您自己运行时的行为不同。

可能的解决方法之一,把

cd `dirname $0` 

在脚本的顶部,这将cd到脚本的目录在运行时。

可能的解决方法二,请尝试直接以绝对路径指定文件:

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

你的问题就出在2号线:

p=$(<password.txt) 

什么,你在这里做的是运行一个“空命令“,将其输出存储在变量p中。但是,您想要执行的操作是运行将密码文件的内容输出到stdout的命令。所以:

p=$(cat <password.txt) 

这将做到这一点。