Shell 脚本未获取密码文件...

发布于 2024-08-30 23:28:22 字数 385 浏览 10 评论 0原文

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

Running the below shell script seems to ignore the password file I'm feeding it. I'm continually prompted for it. If I enter it, the rest of the script goes without a hitch, but as I'm running it via cron, I really need to get it to read from the file... Any suggestions?

#!/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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

薄暮涼年 2024-09-06 23:28:22

您的问题出在第 2 行:

p=$(<password.txt)

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

p=$(cat <password.txt)

这就能解决问题。

Your problem lies in line 2:

p=$(<password.txt)

What you are doing here is to run an "empty command" in a subshell, storing its output in the variable p. What you rather want to do though, is to run a command that outputs the contents of the password file to stdout. So:

p=$(cat <password.txt)

This will do the trick.

痴骨ら 2024-09-06 23:28:22

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

You probably need to specify a full path to the file. Or in your cron job, first cd to the directory containing that file.

海拔太高太耀眼 2024-09-06 23:28:22

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

Does --passphrase really exist? According to the manpage it doesn't, but the versions might be different.

荭秂 2024-09-06 23:28:22

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

可能的解决方案一,放在

cd `dirname $0`

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

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

gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE"

Where is the password file? cron has a different PATH, which can cause scripts to behave differently when you run them yourself.

Possible solution one, put

cd `dirname $0`

at the top of the script, which would cd into the script's directory when it runs.

Possible solution two, try specifying the file directly with an absolute path:

gpg --passphrase-file /some/path/password.txt -o "$destination/$FILENAME" -d "$FILE"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文