2

运行下面的 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

4 回答 4

1

您的问题在于第 2 行:

p=$(<password.txt)

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

p=$(cat <password.txt)

这会成功的。

于 2010-05-03T19:12:45.893 回答
0

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

可能的解决方案一,放

cd `dirname $0`

在脚本的顶部,cd它在运行时将进入脚本的目录。

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

gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE"
于 2010-04-28T16:38:32.213 回答
0

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

于 2010-04-28T16:22:42.827 回答
0

--passphrase真的存在吗?根据手册页,它没有,但版本可能不同。

于 2010-04-28T16:28:23.407 回答