如何在Makefile中自动向git credential-osxkeychain发送ENTER按键?
解决Makefile中自动获取Git凭据的无交互方案
核心思路
git credential-osxkeychain get 需要接收一个空输入(回车)才能输出凭据,用 echo 命令自动生成换行符替代手动按回车操作;再通过文本提取工具从输出中拆分出用户名和PAT。
修改后的Makefile代码
local.test: mycommand --envs GIT_USER_NAME=$$(echo | git credential-osxkeychain get | grep username | cut -d'=' -f2) --envs GIT_PERSONAL_ACCESS_TOKEN=$$(echo | git credential-osxkeychain get | grep password | cut -d'=' -f2)
细节说明
echo | git credential-osxkeychain get:通过管道自动给credential命令传入换行符,避免交互等待grep username/grep password:从输出中筛选出包含用户名和密码的行cut -d'=' -f2:以等号为分隔符,提取等号后的实际用户名/PAT- Makefile中用
$$替代单个$:因为Makefile会把单个$解析为自身的变量引用,双美元符号才会传递给Shell执行命令
优化建议
如果不想重复执行两次git credential-osxkeychain get,可以先把凭据存到临时变量里,提升效率:
local.test: @CREDENTIALS=$$(echo | git credential-osxkeychain get); \ USER_NAME=$$(echo "$$CREDENTIALS" | grep username | cut -d'=' -f2); \ PAT=$$(echo "$$CREDENTIALS" | grep password | cut -d'=' -f2); \ mycommand --envs GIT_USER_NAME=$$USER_NAME --envs GIT_PERSONAL_ACCESS_TOKEN=$$PAT
- 用
@开头可以隐藏Makefile执行时的命令输出,让终端更整洁 - 用分号和反斜杠把命令连起来,确保在同一个Shell进程中执行,变量能共享
内容的提问来源于stack exchange,提问作者Lee
相关产品推荐
相关产品推荐

