【问题标题】:How to execute git commands from bash script?如何从 bash 脚本执行 git 命令?
【发布时间】:2014-09-07 19:59:06
【问题描述】:

我有以下 bash 脚本来启动 ssh-agent,添加我的密钥并对 repo 执行 git pull。代理已启动,密钥已添加,但 git pull 未执行……至少没有任何内容回显到终端。如果我在终端中键入 git 命令,它就可以工作......我需要在我的 bash 脚本中做些什么来让它工作吗?

#!/bin/bash

# if we can't find an agent, start one, and restart the script.
if [ -z "$SSH_AUTH_SOCK" ] ; then
  exec ssh-agent bash -c "ssh-add ; $0"
  exit
fi

exec ssh-add ~/.ssh/mykey
git --git-dir=/var/www/node/myapp/.git pull origin master

当我将 -x 添加到 #!/bin/bash 时,这是终端输出

+ '[' -z '' ']'
+ exec ssh-agent bash -c 'ssh-add ; ./startgit.sh'
+ '[' -z /tmp/ssh-<redacted>/agent.1733 ']'
+ exec ssh-add /home/ec2-user/.ssh/mykey
Identity added: /home/ec2-user/.ssh/mykey (/home/ec2-user/.ssh/mykey)

【问题讨论】:

  • 如果SSH_AUTH_SOCK 为空,您确定要在退出后重新启动脚本吗?您是否尝试过“调试”它(#!/bin/bash -x 回显正在运行的命令)?

标签: git bash shell


【解决方案1】:

exec 命令将当前 shell 替换为已执行的进程。因此,不会执行脚本中跟在它后面的行。

来自手册页:

exec:exec [-cl] [-a name] 文件[重定向...]

执行文件,用指定的程序替换这个shell。 您应该将其从行中删除

exec ssh-add ~/.ssh/mykey

并且简单地拥有

ssh-add ~/.ssh/mykey

【讨论】:

  • 谢谢!!完美运行
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
  • 2021-02-12
  • 2020-12-08
  • 2017-01-04
相关资源
最近更新 更多