我有这个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是一个目录,所以当我输入的时候,敲击tab就会自动完成结果,就像使用nano或类似的东西一样。
发布于 2017-02-27 05:41:06
可以将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) }')"命令,该命令列出了您的目标路径目录项。
如果你想要一个更完整的解决方案:
在包含export REPO_PATH=/Users/matias/Documents/GitHub的情况下,使用complete -o default -F _push push_git
push复制到/bin/push_git/etc/bash_completion.d/push,将脚本复制到complete -o default -F _push push_git/etc/bash_completion.d/pushhttps://stackoverflow.com/questions/42473890
复制相似问题