
我正在編寫一個Dockerfile
使用選項卡進行格式化的文件(我通常在任何地方都使用它)。
但我複製了一個多行命令,其中第二行以兩個製表符開頭,即:
apt-get -y update && \
apt-get -y install collectd \ # begin two tabs
第一行正確執行,但第二行嘗試“自動完成”,顯示所有可能的命令,然後:
> stall collectd
# [ apt-get updating ]
bash: stall: command not found
我理解「自動完成」行為,但是stall collectd
?為什麼 Bash 會吃掉這個apt-get -y in
部分?
答案1
混沌的回答清楚地解釋瞭如何禁用此行為,但我將這個問題解釋為出於對命令第一部分發生的情況的好奇apt-get
:
如果您要輸入兩個選項卡,Bash 會詢問您是否願意,
顯示所有 5177 種可能性? (是或n)?
請注意,可能性的數量取決於您自己的環境。
如果您要回覆字串中的任何字符apt-get -
,Bash 會忽略它們,因為它只需要「是」或「否」。當它得到 時y
,它會顯示所有可能性。
在現代版本的 Bash 中,此清單顯示在More?
底部有提示的尋呼機中。尋呼機使用空格字符向下滾動頁面,忽略後面的i
字符,但下一個字符n
被解釋為“否”以退出尋呼機。
最後,剩餘的字元stall collectd
被 shell 解釋為命令。
答案2
bash
您可以停用按鍵時的完成行為tab:
bind 'set disable-completion on'
現在,該tab鍵只是像在編輯器中一樣縮排該行。這只是暫時的。在下一個 shell 會話中它不會被設定。如果您想讓它永久存在,請將其添加到您的~/.inputrc
.
若要重新啟用tab金鑰,請使用:
bind 'set disable-completion off'