ket*_*urn 68 command-line bash
我在命令行上有这个:
ln -sf $PWD/wine-
Run Code Online (Sandbox Code Playgroud)
然后我点击Tab完成文件名。在早期版本的 Ubuntu 中,这可以很好地完成wine-
文件名(并且$PWD
在当时会扩展副作用)。但现在它变成了
ln -sf \$PWD/wine-
Run Code Online (Sandbox Code Playgroud)
这根本不是我的意思,也没有完成任何事情,因为该文件并不是从字面上开始的 $
.
我如何完成恢复到较少损坏的行为?
set
告诉我这些是我当前的设置:
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
Run Code Online (Sandbox Code Playgroud)
Pet*_*rch 67
我发现bash 版本 >= 4.2.29有一个新的direxpand
shopt 设置。(看看man docs/bash.1
你是否检查了一个新的 bash,或者从 8951 行查看bash.1)
如果使用 Quantal Quetzal 12.10 或以其他方式获取(或检出并构建)一个新的 bash,则:
shopt -s direxpand
Run Code Online (Sandbox Code Playgroud)
给我我想要、需要和爱的行为。
解决方法:在此期间Ctrl+ Alt+ E,而不是Tab我想要做什么了。但是很别扭。
顺便说一句,有几个线程称为“bash tab 变量扩展问题?” 在gnu.bash.bug 中。通过阅读它们,我在这里找到了信息。
小智 20
shopt -u progcomp
Run Code Online (Sandbox Code Playgroud)
这为我修复了它,它还删除了许多“智能”完成选项,我发现这些选项妨碍了我不完成我知道在那里的文件,因为愚蠢的事情认为我不希望它们作为特定的参数命令。ARRRGH
小智 6
_filedir()
在顶级 bash_completion 脚本中搜索并更改行
compopt -o filenames 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
到
compopt -o filenames -o noquote 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
小智 5
在 GNU bash 版本 4.2.46(2)-release 上,选项complete_fullquote
和noquote
不可用。该cdable_vars
选项仅适用于cd
;direxpand
展开变量。
对我来说最有效的是:
shopt -u progcomp
Run Code Online (Sandbox Code Playgroud)
除此之外,它还适用于其他命令,cd
保留变量而不是扩展它们。
归档时间: |
|
查看次数: |
17806 次 |
最近记录: |