Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Avoid duplication of code



Hello All,

It may not directly be related to zsh but please help me improve my
code. There is following function definition in my .zshrc.

----------------------------------------------------------------------
01: update_ssh_auth_sock () {
02:    if [ -z "${TMUX}" ]
03:    then
04:        echo "This function must be called inside tmux session."
05:        return -1
06:    fi
07:    newval=$(tmux show-environment SSH_AUTH_SOCK | sed -n 's/^SSH_AUTH_SOCK=\(.*\)/\1/p')
08:    if [ -n "${SSH_AUTH_SOCK}" ]
09:    then
10:        if [ -z "${newval}" ]
11:        then
12:            unset SSH_AUTH_SOCK
13:            echo "SSH_AUTH_SOCK is cleared."
14:        elif [ "${SSH_AUTH_SOCK}" != "${newval}" ]
15:        then
16:            export SSH_AUTH_SOCK=${newval}
17:            echo "SSH_AUTH_SOCK is updated."
18:        else
19:            echo "SSH_AUTH_SOCK is unchanged."
20:        fi
21:    elif [ -n "${newval}" ]
22:    then
23:        export SSH_AUTH_SOCK=${newval}
24:        echo "SSH_AUTH_SOCK is set now."
25:    else
26:        echo "SSH_AUTH_SOCK stays unset."
27:    fi
28:    return 0
29: }
----------------------------------------------------------------------

I use this function to update environment variables related to
ssh-agent when I attaches tmux session that already exists before
login. Currently this function only update SSH_AUTH_SOCK but I would
like to change it so it also updates SSH_AGENT_PID. The easiest way is
to copy lines from 7 to 27, paste them after line 27 and replace
SSH_AUTH_SOCK with SSH_AGENT_PID. But if possible I would like to
avoid duplication of code. At first following 2 idea hit upon me.

1. Define function that updates single environment variable and pass
   variable name as argument of it.
2. Use 'for name in word; do list done' such as following.

      for valname in SSH_AUTH_SOCK SSH_AGENT_PID
      do
        (update value of environment variable named ${valname})
      done

But it seems that both require nested variable expansion and that it
is impossible. Then is there any other way to avoid code duplication?

Best Regards.

---
Yasuhiro KIMURA



Messages sorted by: Reverse Date, Date, Thread, Author