当我知道定义被处理时,为什么我的bash函数没有执行?

时间:2014-03-20 07:53:14

标签: bash ssh-agent

我的bashrc中有以下内容:

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add;
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    #ps ${SSH_AGENT_PID} doesn't work under cywgin
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

我知道start_agent已定义,因为我可以在命令行中输入start_agent并且“做正确的事”。问题是我希望在登录时执行start_agent并且它没有执行。但我知道控制流正在通过它,因为函数是定义的。

1 个答案:

答案 0 :(得分:1)

尝试:

if [ condition ]; then
  echo "then branch "
  start_agent
else
  echo "else branch"
  start_agent
fi

如果这样可行,那么你的ps -ef ....行就没有达到预期效果。

此外,您可以尝试shellter建议set -vx使用" echo样式"调试。