Shell脚本没有拿起密码文件......
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本没有拿起密码文件......相关的知识,希望对你有一定的参考价值。
运行下面的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
答案
你的问题在于第2行:
p=$(<password.txt)
你在这里做的是在子shell中运行一个“空命令”,将其输出存储在变量p
中。你宁愿做的是运行一个命令,将密码文件的内容输出到stdout
。所以:
p=$(cat <password.txt)
这样就可以了。
另一答案
您可能需要指定文件的完整路径。或者在您的cron作业中,首先cd到包含该文件的目录。
另一答案
--passphrase
真的存在吗?根据the manpage它没有,但版本可能会有所不同。
另一答案
密码文件在哪里? cron
有一个不同的PATH
,这可能导致脚本在你自己运行时表现不同。
可能的解决方案一,放
cd `dirname $0`
在脚本的顶部,当它运行时,cd
将进入脚本的目录。
可能的解决方案二,尝试直接用绝对路径指定文件:
gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE"
以上是关于Shell脚本没有拿起密码文件......的主要内容,如果未能解决你的问题,请参考以下文章