Bash 命令行 Tab 完成冒号字符

2024-04-24

当参数中不包含特殊字符时,我已经使用 compgen 机制成功地为我的自定义命令实现了 bash 补全:

    current=${COMP_WORDS[COMP_CWORD]}
    all=$(_get_all_items)
    COMPREPLY=( $(compgen -W "$all" -- $current) )
    ...
    complete -F _prog_compl prog

我使用相同的方法来完成以冒号字符开头的项目::first, :second,...但它无法向我显示/自动完成它们。我尝试用反斜杠转义冒号,但这也不起作用。我应该如何在完成时转义冒号?

这些项目以冒号开头,比方说::first, :second。如果我写 progname 并以冒号开头,如下所示:

$ progname :<Tab here after colon>

I see 没有完成但两个冒号(“::”) - 其中一个自动添加到我键入的行中。如果我将冒号转换为普通字符(比方说“b”),我会得到完全符合我想要的结果:bfirst, bsecond...

值得注意的是,当我按 Tab 时,它会在我之前插入的冒号旁边放置另一个“:”,并且它会变成“::”。

$ bash --version
GNU bash, version 4.1.10(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

此外,我在 shell 中做了一些实验,结果如下:

$ compgen -W ":aaaa5 :gb2 :cd3" -- ":"
:aaaa5
:gb2
:cd3

然而奇怪的是,它在我唯一的“:”上添加了另一个“:”,并在我在命令行上输入 : 后将其变为“::”。

$ complete
complete -F _alp_compl alp.sh
complete -o nospace -F __dbus_send dbus-send
complete -F _myprog_compl myprog
complete -o nospace -F __gdbus gdbus
complete -o nospace -F __gsettings gsettings

咨询后[电子邮件受保护] /cdn-cgi/l/email-protection我得到了一个答案:

冒号打破了完成系统的单词(看看 COMP_WORDBREAKS shell 变量的描述),因此当您键入

程序名:[TAB]

完成系统得到一个空词来完成。如果所有的 可能的补全有“:”作为最长的公共前缀,然后 补全系统会将冒号插入到该行中。

我的 COMP_WORDBREAKS 搜索为我提供了答案堆栈溢出 https://stackoverflow.com/questions/2805412/bash-completion-for-maven-escapes-colon/12495727#12495727.

修复(我丢失的)/etc/bash_completion 文件后debian bash 完成页面 http://bash-completion.alioth.debian.org/,现在,我的冒号发起的完成正在按照我的意愿进行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bash 命令行 Tab 完成冒号字符 的相关文章

  • 如何在 ruby​​ 中后台运行多个外部命令

    给定这个 Unix shell 脚本 test sh bin sh sleep 2 sleep 5 sleep 1 wait 时间 test sh real 0m5 008s user 0m0 040s sys 0m0 000s 如何在 U
  • 如何让SSH命令执行超时

    我有一个这样的程序 ssh q email protected cdn cgi l email protection exit echo output value gt 在上面的代码中 我尝试通过 SSH 连接到远程服务器 并尝试检查是否可
  • 如何从 Emacs 中运行 Cygwin Bash Shell?

    我在 Windows 上运行 GNU Emacs 因此输入 M x shell 启动 Windows 命令行 DOS shell 但是 我希望能够从 Emacs 中运行 Cygwin Bash Shell 或任何其他非 Windows sh
  • 在大型文本文件中查找重复记录

    我在一台 Linux 机器 Redhat 上 并且有一个 11GB 的文本文件 文本文件中的每一行包含单个记录的数据 并且该行的前 n 个字符包含该记录的唯一标识符 该文件包含略多于 2700 万条记录 我需要验证文件中不存在具有相同唯一标
  • 如何从命令行运行 spock 测试?

    我已经检查过这个链接 https gist github com ysb33r 5825457 https gist github com ysb33r 5825457 似乎可以这样运行 groovyc groovy java cp gra
  • 打印一个字符串,并将其特殊字符打印为文字转义序列

    我在 shell bash 脚本中有一个字符串 我想打印字符串 并将其所有 特殊字符 例如换行符 制表符等 打印为文字转义序列 例如换行符打印为 n 选项卡打印为 t 等等 不确定我是否使用了正确的术语 该示例应该能够澄清问题 Exampl
  • 当 URL 可在浏览器中访问时,SSH Curl 不起作用

    This post is linked with another post of mine still unsolved Laravel 作曲家更新 连接被拒绝 https stackoverflow com questions 52404
  • 混淆 bash 中存储的密码

    我有一个 bash 脚本 我需要编写密码才能运行程序 其他人可以看到它 有没有办法把密码写得不太明显 即使他可以在 bash 中执行相同的命令并获取密码 他也无法读取文本形式的密码 今天我这样做 PASSWORD 1234567 progr
  • 使用 GIT_PS1_SHOWCOLORHINTS 自定义 __git_ps1 的颜色

    我尝试过的 我已更新我的提示以包含分支名称 git ps1 另外 我设置GIT PS1 SHOWCOLORHINTS 问题 提示正确显示 然而 树枝的颜色始终是绿色的 我预计肮脏的树枝会是红色的 文档指出 颜色基于 git status s
  • 从命令行获取设备的 Android SDK 版本

    我计划构建一个自动化系统 用于将 Android 版本部署到各种设备 以便使多平台开发更加轻松 有没有办法通过android shell或adb获取连接设备的sdk版本 将有一台计算机连接多个测试设备 我计划编写一个脚本 该脚本将从构建服务
  • 使用 xclip 将剪贴板内容粘贴到 bash 中的变量中

    我知道这个命令会将剪贴板内容粘贴到文件中 xclip out selection clipboard gt gt file txt 如果我想将剪贴板内容粘贴到变量 如字符串 中 我该怎么办 要将命令的输出分配给变量 可以使用命令替换 myv
  • 从命令输出中设置 GDB 中的环境变量

    我试图在挑战中利用缓冲区溢出 缓冲区从环境变量中获取其值 在 GDB 中 我知道您可以使用以下命令设置环境变量 set environment username test 但是我需要传递用户名变量特殊字符 所以我需要执行以下操作 set e
  • 为什么我的 Java 代码执行 bash 命令不正确?

    我试图让我的 Java 程序与 Linux bash 交互 但出了问题 我有一个简单的可执行文件prog从中读取一个整数stdin并输出其平方 执行中 echo 5 prog 从 bash 本身打印正确答案25 in stdout但运行 i
  • /usr/bin/env: 'python3\r': Windows 中没有抛出此类文件或目录错误

    我正在尝试从下面的存储库在我的 Windows 本地计算机中部署 hyperledger sawtooth https github com hyperledger education https github com hyperledge
  • 验证 BASH 脚本时出现问题 [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试验证 bash 脚本时出现代码 lint 错误 bin bash if eq 0 then printf No argum
  • Bash 脚本重定向不起作用,为什么? [复制]

    这个问题在这里已经有答案了 我最近在 bash 脚本中发现了意外行为 我想在解决它之前先了解它 这是一个简化的示例 bin sh SCRIPT tmp echoscript sh gt gt tmp log bin sh SCRIPT ec
  • bash 用变量值替换字符串中的变量名

    这有点奇怪 我有以下字符串 我有一个名为 REDIRECT 的变量设置为 https working MYDOMAIN blah blah 我需要将 MYDOMAIN 替换为分配给 MYDOMAIN 的变量的实际值 不确定 bash 还是
  • 在Java中运行命令行[重复]

    这个问题在这里已经有答案了 有没有办法在 Java 应用程序中运行此命令行 java jar map jar time rel test txt debug 我可以用命令运行它 但我无法在 Java 中运行它 Runtime rt Runt
  • 当模式在范围内时使用 sed 打印范围?

    我有一个充满查询的日志文件 我只想查看有错误的查询 日志条目类似于 path to file executing query QUERY SIZE ROWS MSG DURATION 我想打印所有这些东西 但只有当MSG 包含一些有趣的内容
  • 在批处理脚本中发送 Windows 密钥

    我最近一直在使用SendKeys使用批处理脚本的函数 我已经了解如何在窗口中输入某些键 例如 Tab 键 SendKeys TAB 或者退格键 SendKeys BACKSPACE 但我一直尝试在不按Windows键的情况下输入它 不幸的是

随机推荐