加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 为什么“$”执行文件名完成?

发布时间:2020-12-15 22:59:04 所属栏目:安全 来源:网络整理
导读:在尝试配置可编程完成时,我遇到了一个我不理解的行为. 鉴于这三种完成方案,这是我理解它们的方式: $TABTAB 行的开头 – 使用完整-E – 如果它不存在,请使用完整的-D – 如果它不存在,请使用默认的Bash完成 – 线上没有字 – 使用命令完成. $comTABTAB 试图
在尝试配置可编程完成时,我遇到了一个我不理解的行为.

鉴于这三种完成方案,这是我理解它们的方式:

$<TAB><TAB>

行的开头 – >使用完整-E – >如果它不存在,请使用完整的-D – >如果它不存在,请使用默认的Bash完成 – >线上没有字 – >使用命令完成.

$com<TAB><TAB>

试图填写第一个单词 – >使用命令完成.

$command argu<TAB><TAB>

线上至少有一个字 – >试图完成一个论点 – >对给定命令使用complete – >如果它不存在,请使用默认的Bash完成 – >线上至少有一个字,所以不要使用命令完成 – >不以$,?或@开头,所以执行文件名完成.

我的问题是为什么在这种情况下执行文件名完成而不是命令完成,即使该行上还没有单词:

$<SPACE><TAB><TAB>

由于下面的命令完成按预期执行,因此更加令人困惑:

$<SPACE>com<TAB><TAB>

我很可能误解了手册,我会非常感谢任何解释.

注意:
?$表示提示,而不是文字美元符号.

解决方法

当一行以Bash shell中的空白开头时,这告诉shell该命令不应该进入命令历史记录.这可以通过在.bashrc,.profile或任何你想要的文件中设置HISTCONTROL env变量来配置,并且应该是默认行为(另请参见 How to prevent commands to show up in bash history?).

因此,当行具有前导空白时,命令执行是相同的,除了该命令不进入历史记录.因此,代码完成也表现相同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读