Shell脚本没有拿起密码文件......

时间:2010-04-28 12:06:14

标签: shell passwords gnupg pgp

运行下面的shell脚本似乎忽略了我正在提供它的密码文件。我不断提示它。如果我输入它,脚本的其余部分顺利进行,但是当我通过cron运行它时,我真的需要从文件中读取它...有什么建议吗?

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

4 个答案:

答案 0 :(得分:1)

你的问题在于第2行:

p=$(<password.txt)

你在这里做的是在子shell中运行一个“空命令”,将其输出存储在变量p中。您更愿意做的是运行一个命令,将密码文件的内容输出到stdout。所以:

p=$(cat <password.txt)

这样就可以了。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

--passphrase真的存在吗?根据{{​​3}}它没有,但版本可能不同。

答案 3 :(得分:0)

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

可能的解决方案一,放

cd `dirname $0`

位于脚本的顶部,在运行时会cd进入脚本的目录。

可能的解决方案二,尝试使用绝对路径直接指定文件:

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