标签: bash-completion

别名的 Git 完成就像 Git 本身一样

背景

我已经成功地为各种 Git 别名配置了 Bash 完成。例如:

$ git config alias.subject
!git --no-pager show --quiet --pretty='%s'
$ function _git_subject() { _git_show; }
$ git subject my<TAB>
$ git subject my-branch
Run Code Online (Sandbox Code Playgroud)

挑战

但是,我有一个 Git 别名,我不知道如何为其设置 Bash 完成。问题是我希望别名能够像顶级 Git 命令本身一样完成。别名是这样的:

$ git config alias.alias
alias = !"f() { if [[ \"$#\" != 1 ]]; then >&2 echo \"Usage: git alias COMMAND\"; return 1; fi; git config alias.\"$1\"; }; f"
# Example
$ git alias s
status
Run Code Online (Sandbox Code Playgroud)

我试过使用_git, __git_main, 和__git_wrap__git_main …

git bash bash-completion git-alias

11
推荐指数
1
解决办法
108
查看次数

用文件名支持Git bash-completion?

是否有支持文件名完成的bash-completion脚本?我主要使用mercurial,我可以输入:

hg diff test/test_<tab>
Run Code Online (Sandbox Code Playgroud)

它将显示/完成所有修改过的测试文件.它适用于大多数子命令,即hg add <tab><tab>只列出未跟踪的文件.这真的很方便.

来自git contrib seams的bash脚本不支持此功能.有没有其他选择,或者你如何在命令行上使用git?

编辑2015

git-completion.bash支持完整的文件名完成,因为~1.8.2

git bash bash-completion

10
推荐指数
1
解决办法
2296
查看次数

Bash完成脚本的单元测试

我想为一个(相当复杂的)Bash完成脚本编写一个单元测试,最好用Python编写 - 只需要以编程方式获取Bash完成的值.测试应如下所示:

def test_completion():
  # trigger_completion should return what a user should get on triggering 
  # Bash completion like this: 'pbt createkvm<TAB>' 
  assert trigger_completion('pbt createkvm') == "module1 module2 module3" 
Run Code Online (Sandbox Code Playgroud)

如何以编程方式模拟Bash完成以检查我的工具的测试套件内的完成值?

python bash bash-completion

10
推荐指数
1
解决办法
1637
查看次数

Git完成和PS1无法正常工作:Ubuntu 12.04上的"sudo -s"或"sudo su"上的"__git_ps1:command not found"

我安装了git和git-flow完成,将这些行添加到root的.bashrc和Ubuntu 12.04机器上的normal_user:

source /etc/git-completion.bash
source /etc/git-flow-completion.bash
GIT_PS1_SHOWUPSTREAM="verbose"
GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '
Run Code Online (Sandbox Code Playgroud)

当我以root身份登录或者normal_user时,git完成工作.但是,如果我使用"sudo -s"或"sudo su"git完成不起作用,每次按回车时我都会不断收到"__git_ps1:command not found".我试图删除"source"命令并使用"apt-get install bash-completion"(已经安装了bash-completion).因此,即使没有2源,我也会得到完全相同的行为.

有人知道问题是什么以及如何使其发挥作用?

git bash bash-completion

10
推荐指数
3
解决办法
2万
查看次数

带有*的意外bash目录列表

我的bash中存在区分大小写的目录列表的问题.例如

   $ touch  nohupa nohuPb
   $ ls nohup*
   nohupa  nohuPb
Run Code Online (Sandbox Code Playgroud)

但是我确实期待它只列出nohupa而不是nohuPb.因为nohuPb有大写字母P.我不知道我的.bashrc集合中哪个变量*工作忽略大小写.

任何的想法 ?

bash bash-completion

9
推荐指数
1
解决办法
148
查看次数

Bash完成 - 如何摆脱不必要的标签按?

我用

cur="${COMP_WORDS[COMP_CWORD]}" 

opts=`sqlite3 test.db "${QUERY[COMP_CWORD]}"`

SAVEIFS="$IFS"

IFS=$'\n'

COMPREPLY=( $(compgen -S"'" -P"'" -W "${opts}" $cur) )

IFS="$SAVEIFS"
Run Code Online (Sandbox Code Playgroud)

从数据库中获取可能的变体并完成它们TAB.只要这些变异可能包含空格,它是方便易使用,以autoquote它们'作为前缀和后缀,所以当我按下A,B,TAB和只有一个与变种AB前缀,然后我得到这样的事情'ABC DEF'.

但问题是,如果以后有很多变种,然后A,B,TAB我得到的'AB,然后我按TAB再次,它是NOP,只有在第三TAB按我得到尽可能完整.

有没有办法将TAB冲压减少到一个或至少两个?

bash shell bash-completion

9
推荐指数
1
解决办法
1618
查看次数

具有bash可编程完成的条件尾随空间

我正在创建一个函数来为我使用的命令提供可编程完成功能(在http://www.debian-administration.org/articles/317的帮助下).shell脚本用法如下:

script.sh command [command options]
Run Code Online (Sandbox Code Playgroud)

其中command可以是'foo'或'bar','foo'的命令选项是'a_foo = value'和'b_foo = value','bar'的命令选项是'a_bar = value'和'b_bar = value' .

这是我正在使用的配置:

_script() {
  local cur command all_commands                                                                    
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  command="${COMP_WORDS[1]}"
  all_commands="foo bar"
  case "${command}" in
    foo)
      COMPREPLY=( $(compgen -W "--a_foo --b_foo" -- ${cur}) ); return 0;;
    bar)
      COMPREPLY=( $(compgen -W "--a_bar --b_bar" -- ${cur}) ); return 0;;
    *) ;;
  esac
  COMPREPLY=( $(compgen -W "${all_commands}" -- ${cur}) )
  return 0
}

complete -F _script script.sh
Run Code Online (Sandbox Code Playgroud)

这主要是按照我的意愿行事:

% script.sh f[TAB]
Run Code Online (Sandbox Code Playgroud)

完成:

% script.sh foo 
Run Code Online (Sandbox Code Playgroud)

(根据需要设有尾随空格) …

bash bash-completion

9
推荐指数
1
解决办法
1612
查看次数

Bash不会自动完成(Tab)文件

bash中的自动完成(使用Tab)适用于文件夹,但不适用于文件.

  • 我正在运行Ubuntu 13.10
  • 我没有触及我的.bashrc文件

这是.bashrc文件的底部部分的外观,安装和更新了bash-completion部分:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

linux bash terminal ubuntu bash-completion

9
推荐指数
1
解决办法
1万
查看次数

bash 自动补全转义 $

在 shell ( GNU bash, version 4.2.47(1)-release (x86_64-suse-linux-gnu)) 中,当我点击 tab 进行自动补全时,“$”在变量名补全后被转义,但如果没有补全,那么它只会响铃。例如

$ ls $JDK_H<tab>
Run Code Online (Sandbox Code Playgroud)

结果是

$ ls \$JDK_HOME (with a trailing space)
Run Code Online (Sandbox Code Playgroud)

在旧的 GNU bash 版本 3.2.51(1)-release (x86_64-suse-linux-gnu) 上,它在完成后没有转义“$”,这正是我想要的。

有没有一种方法可以让旧的行为没有强烈的副作用?我的 BASHOPTS 和 SHELLOPTS 是:

# (indented for readability)
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote
            :force_fignore:histappend:interactive_comments:login_shell
            :progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history
            :interactive-comments:monitor
Run Code Online (Sandbox Code Playgroud)

谢谢。我正在使用 SLES SP11。

- 更新。其他完成似乎照常工作,例如cdecho不转义$. 我也暂时注释掉了/etc/share/bash-completion/bash_completion我的/etc/bash.bashrcwhich,阻止了$逃逸。所以这看起来像是某种完整的配置问题。

bash bash-completion

8
推荐指数
1
解决办法
1782
查看次数

使用 pip install -e 在 setup.py 中安装 data_files

我正在尝试为我的 CLI 工具提供一个用 Python 编写的 bash 完成脚本。根据Python Packaging Authoritydata_files在 setup.py 中正是我需要的:

尽管配置 package_data 足以满足大多数需求,但在某些情况下,您可能需要将数据文件放在包之外。data_files 指令允许您这样做。如果您需要安装其他程序使用的文件,而这些程序可能不知道 Python 包,这将非常有用。

所以我添加了这样的完成文件:

data_files=[
    ('/usr/share/bash-completion/completions', ['completion/dotenv']),
],
Run Code Online (Sandbox Code Playgroud)

并尝试使用以下方法对其进行测试:

pip install -e .

在我的虚拟环境中。但是,未安装完成脚本。我忘记了什么或pip坏了吗?完整的项目可以在这里找到

python pip setuptools bash-completion

8
推荐指数
1
解决办法
1758
查看次数

标签 统计

bash-completion ×10

bash ×9

git ×3

python ×2

git-alias ×1

linux ×1

pip ×1

setuptools ×1

shell ×1

terminal ×1

ubuntu ×1