我有这个bash脚本来缩短我的GitHub推送:
#!/bin/bash
cd /Users/matias/Documents/GitHub/$1
git add *
git commit -m "$2"
git push
我这样用:
matias$ path/to/script.sh project-name commit-message
问题在于我必须写出存储库的全名,它必须在/Users/matias/Documents/GitHub/
我想要的是知道$1
是一个目录,所以当我打字时,点击标签会自动完成结果,比如使用nano或类似的东西。
答案 0 :(得分:0)
您可以将bash completion与以下脚本push
一起使用:
#!/bin/bash
_push()
{
IFS=$'\n'
prev="${COMP_WORDS[COMP_CWORD-1]}"
tmp=( $(compgen -W "$(ls -d $REPO_PATH/*/ | awk -F/ '{ print$(NF-1) }')" -- "${COMP_WORDS[$COMP_CWORD]}" ))
COMPREPLY=( "${tmp[@]// /\ }" )
}
complete -o default -F _push ./push_git
您的脚本push_git
就像:
#!/bin/bash
echo "repo is $1"
cd $REPO_PATH/$1
git add *
git commit -m "$2"
git push
进行测试:
export REPO_PATH=/Users/matias/Documents/GitHub
source push
./push_git #TAB
在./push_git
之后写入TAB时,将执行bash完成功能。从this post开始,您可以完成列出目标路径目录项的命令"$(ls -d $REPO_PATH/*/ | awk -F/ '{ print$(NF-1) }')"
。
如果您想要更完善的解决方案:
push
复制到/etc/bash_completion.d/push
/bin/push_git
/etc/bash_completion.d/push
complete -o default -F _push push_git
.bash_rc
以包含export REPO_PATH=/Users/matias/Documents/GitHub