タブの完了時にbashで$のエスケープを停止する方法は?


38

私はコマンドラインでこれを持っています:

ln -sf $PWD/wine-

その後、ヒットTabしてファイル名を完成させます。Ubuntuの以前のバージョンでは、これはwine-ファイル名を完成させるためにうまく機能しました(そして$PWD、その時点で副作用が拡大するため)。しかし、今ではそれを

ln -sf \$PWD/wine-

これは私が意図したものではなく、ファイルが文字列で始まっていないため、何も完了しません$

破損の少ない動作に戻るにはどうすればよいですか?

set 現在の設定は次のとおりです:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor

2
あなたは、このバグの影響を受けている場合は、次のURLの下に投票をご検討ください(ログインが必要です):bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/...
cripton

回答:


36

bashバージョン> = 4.2.29には新しいdirexpandshopt設定があることがわかりました。(man docs/bash.1新しいbashをチェックアウトするか、行8951のbash.1を参照してください)

Quantal Quetzal 12.10を使用するか、そうでなければ新しいbashを取得(またはチェックアウトしてビルド)した場合、次のようになります。

shopt -s direxpand

私が欲しい、必要とし、愛する行動を与えてくれます。

回避策:当面の間、Ctrl+ Alt+ Eではなく、Tab私が望むことを行います。しかし、厄介です。

ところで、「bash tab variable expansion question?」と呼ばれるスレッドがいくつかあります。でgnu.bash.bug。それらを読んで、ここで情報を見つけました。


2
direxpandを備えたbashのバージョンがPrecise(12.04)に登場しました:bugs.launchpad.net/bugs/778627を
ケターン

7
巨大なパスを展開しておらず、エスケープされていない変数をそのまま使用して続行できればさらに良いでしょう。
jozxyqk 14

@jozxyqkそのパスなしの拡張機能を取得する方法を見つけましたか?
ウンゲホイヤー

@Ungeheuer現在4.4.19、Ubuntu 18.04でbash を使用していますが、動作します。これがいつ変更されたかはわかりません。
jozxyqk

2

_filedir()トップレベルのbash_completionスクリプトを検索して、行を変更します

compopt -o filenames 2>/dev/null

compopt -o filenames -o noquote 2>/dev/null

12.04 GNU bashバージョン4.2.25では、この提案によりエラーが発生しますcompopt: noquote: invalid option name
。– arielf

1

(私のような)12.04の場合、$ PWDの代わりに〜+を使用できます...

例えば ​​:

cd /bin
echo ~+/ls
/bin/ls

1

更新されたbashを使用しても、$まだエスケープされていることがわかりました。

  • bash-completion (1:2.1-3.fc20)パッケージを削除する
  • または単にそれを修正するように見えたから調達/etc/bashrcしていません~/.bashrc

普段使っている機能のいくつかが欠けていると思うが、まだ気づいていない。


代替(少なくともFedora 26の場合)、export BASH_COMPLETION_VERSINFO=0ソースの前に追加し/etc/bashrcます。これにより、問題のあるスクリプトはすでにソースされていると考えられます。



0

シェルオプション 'complete_fullquote'を無効にすると、次の処理が行われます。

shopt -u complete_fullquote

$ shopt -u complete_fullquote -bash:shopt:complete_fullquote:無効なシェルオプション名
Anton Gorev

0
shopt -u progcomp

これは私のためにそれを修正しました、また、愚かなことは特定の引数としてそれらを望んでいないと思うので、そこにあることがわかっているファイルを完了しないことで邪魔になることがわかった多くの「インテリジェント」補完オプションを削除しましたコマンド。ARRRGH

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.