标签: bash-completion

Django Bash 补全不适用于 Manage.py

我正在尝试django_bash_completionDjango 提供的脚本,但无法将其与python manage.py命令一起使用。

我正在尝试django_bash_completionDjango 提供的脚本。我已将其添加到虚拟环境中的活动脚本中。它可以与命令一起使用django-admin,但不能与python manage.py命令一起使用。

cd django-test-project
virtualenv -p python3 venv
echo "source /path/to/.django_bash_completion" >> venv/bin/active
active
django-admin<tab><tab>
python manage.py<tab><tab>
Run Code Online (Sandbox Code Playgroud)

因为django-admin它显示了所有选项,例如,check等等,但是当我运行时它给出了.makemigrationsmigrate runserverpython manage.pymanage.py: command not found

知道为什么以及如何解决它吗?

我在 Ubuntu 18.04 上运行 bash

python django django-manage.py bash-completion

5
推荐指数
1
解决办法
1292
查看次数

从脚本提示符完成 ZSH(如 BASH 的 read -e)

在 bash shell 脚本中,您可以提示用户输入并使用该-e标志为用户启用 readline 完成。(例如read -e -p 'GET YOUR FILE: ' file,允许用户使用制表符完成来查找文件。)

ZSH 的完成更加先进且可扩展,因此我希望我能够找到一个允许类似行为的 zsh 内置函数。

bash zsh bash-completion zsh-completion

4
推荐指数
1
解决办法
640
查看次数

bash-completion - 在第一次调用命令时定义的completion函数

我添加了一个新别名scp_using_rsync,它使用rsync通过SSH复制文件并使用某些选项.我想将scp的bash完成链接到此别名.

当我添加这一行时,它可以工作:

complete -o bashdefault -o default -o nospace -F _scp scp_using_rsync 2>/dev/null || complete -o default -o nospace -F _scp scp_using_rsync
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我注意到,_scp在我的bash环境中定义,只有在我尝试使用ssh/scp在该shell中至少执行一次tab-completion之后.所以,如果我直接scp_using_rsync在新的shell中运行,我会得到_scp未找到的错误.

typeset -F在为ssh或scp命令尝试制表符完成之前和之后,新shell中的输出清楚地表明在第一次尝试制表符完成后定义了以下函数:

$ diff ~/.scratch/file1 ~/.scratch/file2
224a225,227
> declare -f _scp
> declare -f _scp_local_files
> declare -f _scp_remote_files
226a230
> declare -f _sftp
230a235,240
> declare -f _ssh
> declare -f _ssh_ciphers
> declare -f _ssh_macs
> declare -f _ssh_options
> declare -f _ssh_suboption
> declare -f …
Run Code Online (Sandbox Code Playgroud)

bash bash-completion

4
推荐指数
1
解决办法
2220
查看次数

每次打开新终端时抑制 bash_completion 中的语法错误或警告?

bash_completion在我的.bashrc文件中启用。现在,每次我启动终端时,它都会向我显示此警告:

bash: [: too many arguments
bash: [: =: unary operator expected
bash: [: =: unary operator expected
bash: [: too many arguments
Run Code Online (Sandbox Code Playgroud)

有关更多信息,我运行了以下命令:

$ bash .bashrc
Run Code Online (Sandbox Code Playgroud)

它向我展示了这个警告:

/etc/bash_completion.d/gcc: line 50: [: too many arguments
/etc/bash_completion.d/ifupdown: line 3: [: =: unary operator expected
/etc/bash_completion.d/ifupdown: line 19: [: =: unary operator expected
/etc/bash_completion.d/man: line 3: [: too many arguments
Run Code Online (Sandbox Code Playgroud)

第 50 行/etc/bash_completion.d/gcc

[ $USERLAND = GNU -o $UNAME = Cygwin ] && \
Run Code Online (Sandbox Code Playgroud)

我不明白这里有什么问题?如何在终端启动时抑制这些警告。

编辑: …

bash suppress-warnings bash-completion

4
推荐指数
1
解决办法
1197
查看次数

选项卡完成不会完成具有转义空间的路径

有一段时间我现在遇到了令人烦恼的bash-completion问题,即当路径包含转义空间时它不起作用.例如,我在/ cygdrive/c并输入

$ cd Pro
Run Code Online (Sandbox Code Playgroud)

按Tab键完成"cd Program",按两次显示所有带有"Program"前缀的目录:

Program Files/       Program Files (x86)/ ProgramData/
Run Code Online (Sandbox Code Playgroud)

我想cd到"Program Files"所以我输入

$ cd Program\ 
Run Code Online (Sandbox Code Playgroud)

(反斜杠后有空格)从现在开始按Tab键什么也没做.它过去曾经工作过,但我无法确定它何时停止.有关这可能是什么原因的任何提示?

cygwin bash-completion

4
推荐指数
1
解决办法
997
查看次数

为什么 kubectl bash 完成在 macOS/OS X 上不起作用?

我按照以下说明安装 Bash 完成kubectl completion -h

  1. 我是bash-completion通过 Homebrew安装的
  2. 在我的 中~/.bashrc,我首先bash-completion从完成 kubectl 子命令中获取源然后输出:
    • source $(brew --prefix)/etc/bash_completion
    • source <(kubectl completion bash)

有了这些,我启动了一个新的 shell,但完成不起作用。我如何让它工作?

bash homebrew bash-completion kubernetes kubectl

4
推荐指数
1
解决办法
3362
查看次数

使用 Python Click 扩展 BASH 完成

我想自定义我的 Python Click CLI 程序的 BASH 完成功能,不仅包括脚本的命令/子命令,还包括脚本创建的对象。

假设我的程序被调用cli-tool,它可以foo使用以下命令创建对象:

cli-tool object create foo
Run Code Online (Sandbox Code Playgroud)

为简单起见,假设该命令只是将参数字符串(foo在本例中)连接到位于~/.cli-tool/objects/foo. 这样做cat ~/.cli-tool/objects/foo,然后将打印foo在你的终端。

我希望该工具做的是当我输入:

cli-tool object get <TAB><TAB>
Run Code Online (Sandbox Code Playgroud)

终端然后将名单foo及任何其他文件里面住~/.cli-tool/objects

作为记录,我已阅读Python Click 6.x stable 文档,其中明确指出:

目前,Bash 补全是一个不可定制的内部功能。这在未来的版本中可能会放宽。

我希望有一种方法可以从以下命令中提取完整的BASH 完成脚本:

eval "$(_CLI_TOOL_COMPLETE=source cli-tool)"
Run Code Online (Sandbox Code Playgroud)

然后自己定制。我也看过点击完成项目,但我不确定它除了扩展 Zsh 和 Fish shell 的完成之外还有什么作用。

有没有人达到我上面提到的完成类型?

command-line-interface bash-completion python-click

4
推荐指数
1
解决办法
3619
查看次数

不要在shell中为vim自动完成文件名中的某些扩展

我注意到bash中bash完成的一个非常酷的功能.假设我有一个包含文件的目录

a.java
a.class
b.java
b.class
Run Code Online (Sandbox Code Playgroud)

如果我开始输入vim a Tab,bash将自动完成a.java.它知道我不想编辑a.class

我想知道它是如何实现这种行为的.在我的bash_completion.d目录中有一堆completion文件,但vim没有一个.如何vim实现此行为,以及如何修改它以包含要忽略的其他文件扩展名?

macos vim bash bash-completion

4
推荐指数
1
解决办法
175
查看次数

git 自定义子命令的 bash 补全?

假设我有一个git-cc可执行文件PATH。如果git-cc支持--help,那么很容易提供足够的完成

complete -F _longopt git-cc
Run Code Online (Sandbox Code Playgroud)

这样就$ git-cc --<TAB>完成了(根据帮助输出)。但git cc --<TAB>不会完成(即使它运行良好)。更重要的是,如果我为自定义子命令创建 git 别名,例如cc-sensible-defaults = cc --opt1 ...,那也不起作用,在这种情况下,简单地删除空格(git-cc而不是git cc)不是一个选项。

该怎么办?我尝试过使用__git_complete [git-]cc _longopt,但各种组合都没有起到任何作用。它似乎是为了完成 bash 别名(如gl = git-log),而不是子命令。正如预期的那样, git/git-completion.bash中的介绍不是很有帮助,包含令人困惑的内容

# If you have a command that is not part of git, but you would still
# like completion, you can use __git_complete:
#
#   __git_complete gl git_log
#
# Or …
Run Code Online (Sandbox Code Playgroud)

git bash-completion git-completion

4
推荐指数
1
解决办法
589
查看次数

Zsh功能:向前完成到子功能

很多时候我最终会围绕现有函数编写包装函数,例如:

function gl {
    some_computed_stuff=...
    git --no-pager log --reverse $some_computed_stuff "$@"
}
function m {
    make "$@" && notify-send success || notify-send failed
}
Run Code Online (Sandbox Code Playgroud)

我知道别名保持自动完成,但有时需要函数,在这种情况下自动完成会丢失.例如,我想继续git log完成我的功能glmake完成m.

我试图添加,compctl -K _git gl但没有提出任何建议.它无论如何都行不通,因为我必须以某种方式找到如何log_git自动完成脚本提供参数,所以我的问题是:

有没有办法让ZSH(还有bash)明白打字gl是完全相同的git log?像(仅适用于ZSH):

compctl 'git log' gl
compctl 'make' m 
Run Code Online (Sandbox Code Playgroud)

zsh autocomplete bash-completion zsh-completion

3
推荐指数
1
解决办法
312
查看次数