2017-02-26 46 views
2

我已经缩短我的GitHub这个bash脚本推:我怎么能写识别参数目录bash脚本

#!/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是一个目录和s o当我打字时,击打选项卡会自动完成结果,如使用nano或类似的东西。

+0

你见过[如何创建脚本与自动完成](http://askubuntu.com/questions/68175/how-to-create-script-with-auto-complete)? – RuDevel

回答

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 

当后写TAB ./push_git bash compl etion函数将会执行。从this post开始,您可以完成将列出您的目标路径目录项目的命令"$(ls -d $REPO_PATH/*/ | awk -F/ '{ print$(NF-1) }')"

如果你想要更完美的解决方案:

  • 复制您完成文件push/etc/bash_completion.d/push
  • 脚本复制到/bin/push_git
  • 编辑/etc/bash_completion.d/pushcomplete -o default -F _push push_git
  • 编辑您的.bash_rc包括export REPO_PATH=/Users/matias/Documents/GitHub
+1

这个*几乎可以*起作用,但在某些角落案例中失败:包含换行符的文件名以及可能被解释为匹配模式的文件名。 – chepner