3

Я пишу 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?

2 ответа2

5

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

bind 'set disable-completion on'

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

Чтобы снова включить клавишу табуляции, используйте:

bind 'set disable-completion off'
3

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

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .