
私はDockerfile
タブ(通常はどこでも使用します)を使用して書式設定した を作成しています。
しかし、2 行目が 2 つのタブ文字で始まる複数行のコマンドをコピーしました。つまり、
apt-get -y update && \
apt-get -y install collectd \ # begin two tabs
最初の行は正しく実行されますが、2 行目は「自動補完」を試み、すべての可能なコマンドを表示してから、次のようになります。
> stall collectd
# [ apt-get updating ]
bash: stall: command not found
「自動補完」の動作は理解できますが、stall collectd
なぜ Bash がそのapt-get -y in
部分を消費するのでしょうか?
答え1
カオスの答えこの動作を無効にする方法は明確に説明されていますが、私はこの質問がコマンドの最初の部分に何が起こったのかという好奇心から生じたものであると解釈しましたapt-get
。
2つのタブを入力すると、Bashは次のように尋ねます。
5177 の可能性をすべて表示しますか? (y または n)?
可能性の数は、ご自身の環境によって異なることに注意してください。
文字列 のいずれかの文字で応答した場合apt-get -
、Bash は yes または no のみを要求しているため、それらを無視します。 を取得するとy
、すべての可能性が表示されます。
More?
Bash の最新バージョンでは、このリストは下部にプロンプトがあるページャーに表示されます。ページャーはスペース文字を使用してページを下にスクロールし、次の文字は無視されますi
が、次の文字はn
ページャーを終了する「いいえ」として解釈されます。
最後に、残りの文字はstall collectd
シェルによってコマンドとして解釈されます。
答え2
bash
キーを押したときの補完動作を無効にすることができますtab:
bind 'set disable-completion on'
現在、tabキーはエディター内のように行をインデントするだけです。これは一時的なものです。次のシェル セッションでは設定されません。これを永続的にしたい場合は、 に追加します~/.inputrc
。
キーを再度有効にするには、次tabを使用します。
bind 'set disable-completion off'