私のスクリプトが/ mydirの代わりに/で実行されるのはなぜですか?

私のスクリプトが/ mydirの代わりに/で実行されるのはなぜですか?

以下は、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"

おすすめ記事