首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写将参数识别为目录的bash脚本

如何编写将参数识别为目录的bash脚本
EN

Stack Overflow用户
提问于 2017-02-27 04:31:54
回答 1查看 48关注 0票数 2

我有这个bash脚本来缩短我的GitHub推送:

代码语言:javascript
复制
#!/bin/bash

cd /Users/matias/Documents/GitHub/$1
git add *
git commit -m "$2"
git push

我是这样使用它的:

代码语言:javascript
复制
matias$ path/to/script.sh project-name commit-message

它的问题是,我必须写出存储库的全名,而且它必须在/Users/matias/Documents/GitHub/

我想要的是知道$1是一个目录,所以当我输入的时候,敲击tab就会自动完成结果,就像使用nano或类似的东西一样。

EN

回答 1

Stack Overflow用户

发布于 2017-02-27 05:41:06

可以将bash completion与以下脚本push一起使用:

代码语言:javascript
复制
#!/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将如下所示:

代码语言:javascript
复制
#!/bin/bash

echo "repo is $1"
cd $REPO_PATH/$1
git add *
git commit -m "$2"
git push

要测试它,请执行以下操作:

代码语言:javascript
复制
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

  • edit
  • 将完成文件push复制到/bin/push_git
  • edit /etc/bash_completion.d/push,将脚本复制到complete -o default -F _push push_git
  • edit/etc/bash_completion.d/push
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42473890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档