Re: gpg-agent, ssh keys, and systemd --user

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



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


[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux