On 2013-04-11 at 22:50 +1000, Robbie Smith wrote:
if (( $+commands[gpg-agent] )); then local InfoFile=/run/user/$(id -u)/gpg-agent.info if [[ -s $InfoFile ]]; then eval "$(cat $InfoFile)" fi unset InfoFile fi
Strangely enough, this doesn’t seem to work. What’s the difference between exporting variables in /etc/profile.d/ and ~/.zshrc?
First, `/etc/profile` and therefore `/etc/profile.d` is sourced by login shells and `~/.zshrc` sourced by interactive Z shells, Thus an interactive login Z shell reads both. See the "STARTUP/SHUTDOWN FILES" section in man:zsh(1). Second, you aren't "exporting" anything. The gpg-agent env-file is an environment file consisting of one variable assignment per line. When you source the file the shell sets these variables just as shell variables. They are only available to the current shell process. To make them available to child process as environment variables you have to export them. The simplest way to do all this probably would be: export $(< "$InfoFile") And third, a couple of other remarks.
if (( $+commands[gpg-agent] )); then local InfoFile=/run/user/$(id -u)/gpg-agent.info
The runtime directory is available in the environment variable XDG_RUNTIME_DIR. You can just use local InfoFile=$XDG_RUNTIME_DIR/gpg-agent.info Or if you don't want to rely on that: local InfoFile=${XDG_RUNTIME_DIR:-/run/user/${UID:-$(id -u)}}/gpg-agent.info
if [[ -s $InfoFile ]]; then eval "$(cat $InfoFile)" fi unset InfoFile fi
Don't read a file with cat and the evaluate the output. Just let the shell source the file directly: source "$InfoFile" HTH, Sebastian