Шаблон подстановки файлов, !(*пример), ведет себя в сценарии bash иначе, чем в оболочке bash

Похоже, вы на самом деле не завершили установку и у вас был только минимальный набор инструментов, являющихся частью системы установки. Инструменты apt должны быть среди этих минимальных инструментов, но не передняя часть aptitude -, которая не установлена ​​по умолчанию в Debian.

Когда я устанавливал Debian на свой ноутбук, у меня были некоторые проблемы с ним на ранней стадии процесса установки, потому что ему требовались сетевые драйверы, которых не было на установочном носителе. Насколько я помню, предложенный обходной путь, который мне был нужен, заключался в том, чтобы найти пакеты драйверов и поместить их на USB-накопитель. Для этого потребуется определить сетевую карту WiFi и найти нужный пакет в веб-интерфейсе к репозиториям Debian . Один из способов сделать это — проверить, какой драйвер используется в Ubuntu; пакет, вероятно, имеет то же имя. Насколько я помню, я подключил ноутбук к коммутатору через кабель Ethernet и таким образом завершил установку.

В целом, хотя я бы сказал, что Debian берет на себя больше инициативы со стороны пользователя, чем Ubuntu или Linux Mint, цель проекта Debian состоит в том, чтобы предложить полную общую цель, поэтому, если вы явно не выбрали минимальную установку, установка Debian по умолчанию будет включать большинство или все инструменты, которые вы ожидаете.

5
27.05.2019, 13:04
1 ответ

Расширенный оператор оболочки !(...)Korn доступен только в bashпри включении параметра extglob(по умолчанию )он отключен.

Вы можете включить extglobв своей интерактивной оболочке через ~/.bashrcили другой файл инициализации, но обратите внимание, что эти файлы не используются при запуске скриптов, и этот параметр не наследуется от вызывающей оболочки (, если только переменную BASHOPTSв окружении, но было бы плохой идеей иметь ее там ).

Явное включение с помощью

shopt -s extglob

в начале вашего скрипта должно работать.

Обратите внимание, что shopt -s extglobдействует только начиная со следующей строки, которая еще не была проанализирована. Это означает, что вы не можете использовать shopt -s extglobкак set -f, чтобы включить расширенные шаблоны только в подоболочке :

.
# this won't work
(
  shopt -s extglob
  echo !(no such file)
)

Вам нужно сделать что-то вроде:

(
  shopt -s extglob
  eval 'echo !(no such file)'
)
14
27.01.2020, 20:33

Теги

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