
以下は、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
サブシェルで実行されます。つまり、cmd
メインシェルの環境に影響を与えることはできません。走る
cd /userdir
代わりに。しかし、現在の作業ディレクトリはgpg
設定ディレクトリが~/.gnupg
。
設定が変な~
ようです/
。HOME
スクリプトの先頭で設定できます。
export HOME="/userdir"
または単にディレクトリを設定してくださいgpg
:
export GNUPGHOME="/userdir"
答え2
これは、gpg-agentがホーム(--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