タブで始まるBashコマンドを貼り付けると補完される

タブで始まるBashコマンドを貼り付けると補完される

私は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'

関連情報