Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不是';当我知道定义已被处理时,我的bash函数是否正在执行?_Bash_Ssh Agent - Fatal编程技术网

为什么不是';当我知道定义已被处理时,我的bash函数是否正在执行?

为什么不是';当我知道定义已被处理时,我的bash函数是否正在执行?,bash,ssh-agent,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}" . "

我的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\u agent
,是因为我可以在命令行上键入
start\u agent
,它“做正确的事情”。问题是我希望登录时执行
start\u agent
,但它没有执行。但我知道控制流正在通过它,因为函数已定义。

请尝试:

if [ condition ]; then
  echo "then branch "
  start_agent
else
  echo "else branch"
  start_agent
fi
如果这样做有效,那么是您的
ps-ef….
行没有达到预期效果


此外,您可以尝试Shelleter建议的“回声式”调试
set-vx

只需尝试:
if[condition];然后呼应“然后分支”;启动_代理;else呼应“else分支”;启动_代理;fi
如果这样做有效,那么是你的
ps-ef….
行没有达到你的预期。同意。O.P.还可以使用
set-vx
打开外壳调试/跟踪。首先,它显示将要计算的代码行或代码块(按原样,
$var
单词仍在原位)。然后它显示(通常不是按照代码编写的顺序)行,其中$var扩展到当前值。祝大家好运。@RedX感谢调试提示。我应该更耐心地逐行“echo”.我想我在屏幕前花了太多时间,只是放弃了(即去了SO)。如果您正在查找一些SO点,请将您的评论放在答案中,我会将这些点发送给您。您使用
chmod
进行的处理有一个争用条件--攻击者可以在文件创建和
chmod
之间修改文件。这不仅仅是理论上的,实践中也有众所周知的示例。请问最佳修复方法是什么将是完全删除该文件--类似于
eval$(ssh-agent | sed的/^echo/#&/)
的东西对您有用吗?