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脚本没有拿起密码文件......的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shell脚本可以加密吗

使用 shell 脚本自动传输 scp 文件

如何从需要SUDO的php调用shell脚本?

常用python日期日志获取内容循环的代码片段

shell脚本中实现自动判断用户有无密码