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

问题描述 投票:2回答:4

运行下面的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
shell passwords gnupg pgp
4个回答
1
投票

你的问题在于第2行:

p=$(<password.txt)

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

p=$(cat <password.txt)

这样就可以了。


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"
© www.soinside.com 2019 - 2024. All rights reserved.