如何讓 bash 在製表符完成期間停止轉義 $?

如何讓 bash 在製表符完成期間停止轉義 $?

我在命令列上有這個:

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

答案1

我發現bash 版本 >= 4.2.29有一個新的direxpand商店設置。 (看看man docs/bash.1你是否檢查了一個新的 bash,或者看看bash.1 來自第 8951 行

如果使用 Quantal Quetzal 12.10 或以其他方式取得(或簽出並建置)一個新的 bash,則:

shopt -s direxpand

給我想要、需要和喜愛的行為。

解決方法:同時,++Ctrl而不是做我想要的事情。但很尷尬。AltETab

順便說一句,有幾個線程稱為“bash tab 變數擴展問題?”在gnu bash 錯誤。透過閱讀它們,我在這裡找到了資訊。

答案2

shopt -u progcomp

這為我解決了這個問題,它還刪除了很多“智能”完成選項,我發現這些選項通過不完成我知道在那裡的文件而妨礙,因為愚蠢的事情認為我不希望它們作為特定的參數命令。 ARRRGH

答案3

_filedir()在頂級 bash_completion 腳本中搜尋並更改行

compopt -o filenames 2>/dev/null

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

答案4

對於那些(像我一樣)使用 12.04 的人可以使用 ~+ 而不是 $PWD...

例如 :

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

相關內容