我正在尝试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
在 bash shell 脚本中,您可以提示用户输入并使用该-e标志为用户启用 readline 完成。(例如read -e -p 'GET YOUR FILE: ' file,允许用户使用制表符完成来查找文件。)
ZSH 的完成更加先进且可扩展,因此我希望我能够找到一个允许类似行为的 zsh 内置函数。
我添加了一个新别名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_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-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键什么也没做.它过去曾经工作过,但我无法确定它何时停止.有关这可能是什么原因的任何提示?
我按照以下说明安装 Bash 完成kubectl completion -h:
bash-completion通过 Homebrew安装的~/.bashrc,我首先bash-completion从完成 kubectl 子命令中获取源然后输出:
source $(brew --prefix)/etc/bash_completionsource <(kubectl completion bash)有了这些,我启动了一个新的 shell,但完成不起作用。我如何让它工作?
我想自定义我的 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 的完成之外还有什么作用。
有没有人达到我上面提到的完成类型?
我注意到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实现此行为,以及如何修改它以包含要忽略的其他文件扩展名?
假设我有一个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) 很多时候我最终会围绕现有函数编写包装函数,例如:
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完成我的功能gl或make完成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) bash-completion ×10
bash ×5
zsh ×2
autocomplete ×1
cygwin ×1
django ×1
git ×1
homebrew ×1
kubectl ×1
kubernetes ×1
macos ×1
python ×1
python-click ×1
vim ×1