help / color / mirror / Atom feed
From: Yasuhiro KIMURA <yasu@utahime.org>
To: zsh-users@zsh.org
Subject: Avoid duplication of code
Date: Mon, 25 May 2020 18:02:59 +0900 (JST)
Message-ID: <20200525.180259.1237420001357827351.yasu@utahime.org> (raw)

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
        (update value of environment variable named ${valname})

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

             reply	other threads:[~2020-05-25  9:05 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-25  9:02 Yasuhiro KIMURA [this message]
2020-05-25 14:22 ` Jun. T
2020-05-28  8:05   ` Yasuhiro KIMURA
2020-05-28  8:53     ` Daniel Shahaf
2020-05-28 10:24       ` Yasuhiro KIMURA

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200525.180259.1237420001357827351.yasu@utahime.org \
    --to=yasu@utahime.org \
    --cc=zsh-users@zsh.org \


* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link


This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://inbox.vuxu.org/zsh-users

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V1 zsh-users zsh-users/ http://inbox.vuxu.org/zsh-users \
	public-inbox-index zsh-users

Example config snippet for mirrors.
Newsgroup available over NNTP:

code repositories for the project(s) associated with this inbox:


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git