我在命令列上有這個:
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