![为什么我的脚本在 / 而不是 /mydir 中执行?](https://linux22.com/image/46697/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%E8%84%9A%E6%9C%AC%E5%9C%A8%20%2F%20%E8%80%8C%E4%B8%8D%E6%98%AF%20%2Fmydir%20%E4%B8%AD%E6%89%A7%E8%A1%8C%EF%BC%9F.png)
这是我的脚本,它只是在通知 fs 上的更改时更新 slackware 的本地存储库。它在后台工作,但有一个小问题,而不是在存在 .gpg 的 /userdir 中工作,它在 / 中工作并创建一个新的 .gnupg 目录:/ 当然不起作用。我的问题是:如何强制脚本在 userdir 上工作并读取 userdir 的 gpg-agent 和 .gnupg 密钥环?我已经尝试过 cd 和 (cd /usrdir) 但没有任何效果谢谢
#!/bin/sh
funct()
{
(cd /userdir) #don't work :(
echo password|/usr/libexec/gpg-preset-passphrase --preset XXXXXXXXXXXXXXXXXXXXXXX
#script update repo http
/usr/local/bin/gen_repos_files.sh -l /tmp/emptylog -v
#find /var/localrepo -type f |xargs chmod 644 -v
}
while inotifywait -o /dev/null -qqre modify /var/localrepo; do funct; done
~~
答案1
( cmd )
cmd
在子 shell 中执行。即cmd
不能影响主shell的环境。跑步
cd /userdir
反而。但当前工作目录不会影响 的使用,gpg
因为它期望其配置目录为~/.gnupg
.
你的~
设置似乎/
很奇怪。您可以HOME
在脚本的开头设置
export HOME="/userdir"
或仅设置目录gpg
:
export GNUPGHOME="/userdir"
答案2
这是我的最终脚本 gpg-agent 需要指定 home (--homedir 选项)
#!/bin/sh
export HOME="/userdir"
export GNUPGHOME="/userdir/.gnupg"
funct()
{
pkill gpg-agent
rm ~/.gnupg/S.gpg-agent
mknod -m 700 ~/.gnupg/S.gpg-agent p
eval $(gpg-agent --daemon --allow-preset-passphrase --homedir="$(pwd)")
echo RELOADAGENT | gpg-connect-agent
echo XXX|/usr/libexec/gpg-preset-passphrase --preset XXXXXXXXXXXXXXXX
#script update repo http
/usr/local/bin/gen_repos_files.sh -l /tmp/emptylog -v
find /var/repo/ -type f |xargs chmod 644 -v
}
cd /userdir
while inotifywait -o /dev/null -qqre modify /var/repo; do cd /userdir && funct; done