내 스크립트가 /mydir 대신 /에서 실행되는 이유는 무엇입니까?

내 스크립트가 /mydir 대신 /에서 실행되는 이유는 무엇입니까?

다음은 fs에 대한 변경 알림을 받을 때 슬랙웨어의 로컬 저장소를 간단히 업데이트하는 스크립트입니다. 백그라운드에서 작동하지만 작은 문제가 있습니다. .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

관련 정보