在 manjaro(KDE)中,使用 sudo 时不能补全参数 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
jzq526
V2EX    Linux

在 manjaro(KDE)中,使用 sudo 时不能补全参数

  •  
  •   jzq526 2020-08-02 10:00:20 +08:00 4087 次点击
    这是一个创建于 1949 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 manjaro ( KDE )中,使用 sudo 时不能补全参数。例如输入 sudo systemctl res,此时按下 tab 键,出现的提示并不包括 restart 。使用 pacman 安装软件时也不能补全软件名。 但不加 sudo 就可以补全参数或软件名,普通用户和 root 用户均是如此。 (baidu 上查到过很多方法,但无一有效) 不过 debian 、ubuntu 和 centos 都没有这个问题…… 请教高手, 这个问题怎么解决? 先行谢过

    第 1 条附言    2020-08-03 11:08:56 +08:00
    zsh 据说可以解决,但我用不惯 zsh 。

    而且换了 zsh,bash 的问题还在。

    最后感谢 @Hardrain 提供了注释掉.bashrc 中的`complete -cf sudo`的方法。

    但不明白的是,这个命令本来应该是让 sudo 后面可以用补全功能的……

    继续折腾吧
    19 条回复    2020-08-05 16:39:50 +08:00
    itskingname
        1
    itskingname  
       2020-08-02 10:08:19 +08:00
    觉得这可能是它自带的终端模拟器的问题。你换一个终端模拟器看看?
    Jirajine
        2
    Jirajine  
       2020-08-02 10:11:24 +08:00 via Android
    换 zsh,用 ohmyzsh 有 sudo 的插件。
    vk42
        3
    vk42  
       2020-08-02 10:11:48 +08:00
    你用的什么 shell,这个应该是 shell 配置的问题
    Yadomin
        4
    Yadomin  
       2020-08-02 10:13:52 +08:00 via Android
    bash-completion 的问题…
    Nitroethane
        5
    Nitroethane  
       2020-08-02 10:16:10 +08:00 via iPhone
    假定你用的 zsh,看这篇贴子里用到了 zstyle,https://forums.gentoo.org/viewtopic-t-1053122-start-0.html
    iamwho
        6
    iamwho  
       2020-08-02 10:17:06 +08:00
    sudo pacman -S bash-completion

    echo '. /usr/share/bash-completion/bash_completion' >> ~/.bashrc
    Hardrain
        7
    Hardrain  
       2020-08-02 10:46:49 +08:00
    在`~/.bashrc`或`/etc/bash.bashrc`中找到

    ```
    complete -cf sudo
    ```

    使其不生效(注释掉 /移除)
    Jat001
        8
    Jat001  
       2020-08-02 11:54:50 +08:00 via iPhone
    这跟 kde 和 manjaro 没什么关系,是 shell 配置错误
    nguoidiqua
        9
    nguoidiqua  
       2020-08-02 13:05:56 +08:00
    换 shell 比如 fish
    reedthink
        10
    reedthink  
       2020-08-02 13:20:51 +08:00
    换 zsh 吧,好看又好用
    whenov
        11
    whenov  
       2020-08-02 13:26:48 +08:00
    @iamwho 第二句在 /etc/bash.bashrc 里面有吧
    zhuangzhuang1988
        12
    zhuangzhuang1988  
       2020-08-02 23:16:44 +08:00
    换 powershell 吧,好看又好用
    jzq526
        13
    jzq526  
    OP
       2020-08-03 09:05:50 +08:00
    @Hardrain 你这个方法是目前唯一有效的。问题是:为什么?我在.bashrc 中添加了一条 complete -cf man,然后 man 命令后面就可以自动补全了,之前是不行的,但现在注释掉 complete -cf sudo,反而 sudo 后面就能自动补全但之前不行呢?
    jzq526
        14
    jzq526  
    OP
       2020-08-03 11:04:29 +08:00
    @vk42 bash,默认的。
    jzq526
        15
    jzq526  
    OP
       2020-08-03 11:05:09 +08:00
    @itskingname 换了个 terminator,以及 yakuake,都存在这个问题。
    jzq526
        16
    jzq526  
    OP
       2020-08-03 11:11:02 +08:00
    @Jat001 按说是没有关系,只是以防万一。我以前遇到过怎么改本地语言都不行的情况(除非使用 KDE 自己的配置工具),最后发现是 KDE 桌面自己还有一个设置文件作祟……
    Hardrain
        17
    Hardrain  
       2020-08-04 22:20:01 +08:00
    @jzq526 简单来说,complete -cf sudo 做了如下事:

    告诉 bash,当你输入了 sudo 后,按下 Tab 尝试补全时,就当目前输入的命令行里没有 sudo

    于是,bash 尝试补全出一个命令,然后的问题是,complete -cf sudo **覆盖了那个命令在 bash-completion 中的配置文件**

    由此地,假设你输入了 sudo systemctl 后按 Tab,只会补全出当前目录下的文件 /目录,而不会是 systemctl 的 bash-completion 配置文件所提供的 arguments,比如 start, status, stop, reload...
    Hardrain
        18
    Hardrain  
       2020-08-04 22:25:58 +08:00
    @jzq526 在 bash 的配置文件(无论是 per-user 的~/.bashrc 还是 global 的 /etc/bash.bashrc)添加 complete -cf sudo,可能是 bash-completion 还没支持 sudo 这命令时,一种**头疼医头、脚疼医脚**的表面性的解决问题的方案。

    毕竟如果没有这行命令,sudo 的补全应该回事当前目录下的文件,而不是任何命令,这显然是 unreasonable 的。

    而加了这行命令,sudo 至少能被补全出系统的 PATH 中所有存在的程序(命令)了,至于这些命令能否被正常补全,这个解决方案的作者显然没考虑。

    回到现在,bash-completion 已经支持了 sudo:

    $ pacman -Ql bash-completion | grep sudo
    bash-completion /usr/share/bash-completion/completions/sudo
    bash-completion /usr/share/bash-completion/completions/sudoedit

    这个命令起了反作用,让 sudo 的补全不能正常工作了,因此将它从 bash 的配置文件移除或注释掉。

    参见:

    bash 的文档中关于"可编程的自动补全"章节: https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html

    一个更简单的版本,提及了 complete -cf 在做什么:
    https://medium.com/marcos-oliveira/how-auto-complete-works-in-shell-linux-fe3c37b47361
    jzq526
        19
    jzq526  
    OP
       2020-08-05 16:39:50 +08:00
    @Hardrain 非常感谢。估计这玩意儿就跟我以前遇到的一个驱动程序一个样儿:第一次双击就是安装,第二次双击就是卸载。非常无语。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     938 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:53 PVG 05:53 LAX 13:53 JFK 16:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86