Завершение при вставке команды Bash, начинающейся с вкладок

516
lucasvc

Я пишу, 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? Почему Баш ест apt-get -y inчасть?

3

2 ответа на вопрос

5
chaos

Вы можете отключить режим завершения bashпри нажатии tabклавиши:

bind 'set disable-completion on' 

Теперь tabключ просто выравнивает строку, как внутри редактора. Это просто временно. На следующем сеансе оболочки это не установлено. Если вы хотите, чтобы это не было постоянным, добавьте это к себе ~/.inputrc.

Для повторного включения tabключа используйте:

bind 'set disable-completion off' 
Можете ли вы объяснить, почему мы не можем просто ввести `set disable-complete off` в оболочке / почему я должен передать это как строку команде` bind`? Luke Davis 6 лет назад 0
3
Anthony Geoghegan

Ответ Хаоса ясно объясняет, как отключить это поведение, но я интерпретировал этот вопрос как мотивированный любопытством по поводу того, что случилось с первой частью apt-getкоманды:

Если бы вы набрали две вкладки, Bash спросит, хотите ли вы,

Показать все 5177 возможностей? (у или н)?

Обратите внимание, что количество возможностей зависит от вашей собственной среды.

Если бы вы ответили любым из символов в строке apt-get -, Bash проигнорировал бы их, так как он хочет только «да» или «нет». Когда он получает y, он отображает все возможности.

В современных версиях Bash этот список отображается в пейджере с More?подсказкой внизу. Пейджер использует пробел для прокрутки вниз страницы, игнорирует следующий, iно следующий символ, nинтерпретируется как «Нет» для выхода из пейджера.

Наконец, остальные символы stall collectdинтерпретируются оболочкой как команда.

Похожие вопросы