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