为什么不是';当我知道定义已被处理时,我的bash函数是否正在执行?
我的bashrc中有以下内容:为什么不是';当我知道定义已被处理时,我的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}" . "
# 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/#&/)
的东西对您有用吗?