! (*. Sh) работает в командной строке, но не в сценарии

Если у Вас есть доступ к окна 7 дисков/ISO, можно использовать это для переустановки загрузчика окон. Во время установки Дуги я предполагаю, что можно установить GRUB.

3
05.08.2015, 01:59
3 ответа

Подход к сценарию оболочки

По умолчанию глобусы не работают в сценарии BASH (хотя вы можете включить их с помощью shopt ]). Если сценарий оболочки когда-либо запускается интерпретатором, отличным от BASH, глобусы могут вообще не работать.

Вы можете получить тот же эффект, используя команду find , как я бы рекомендовал это сделать (из-за того, насколько больше контроля вы можете получить, когда ваши требования возрастут).

Примерьте это на размер:
найти. -mindepth 1 -maxdepth 1 -not -iname "*.sh "-exec rm -rf {} \;

Подход к Makefile

Другой подход, который вы могли бы использовать:

Если вы делаете что-то, что нужно очистить впоследствии, есть большая вероятность, что Makefile является правильный инструмент для работы, а не набор clean.sh, build.sh, install.sh и т. д.

Это особенно верно, если вы хотите, чтобы ваши рецепты всегда выполнялись по порядку, или если вы этого не сделаете. Я всегда хочу повторно запускать рецепты, которые производят вывод.

Простой файл Makefile, выполняющий то же самое, будет выглядеть так:
(обратите внимание, что пробел перед rm должен быть вкладкой, потому что именно так можно делать броски)

SOURCES := $(wildcard *.sh)
CLEAN_FILES := $(filter-out $(SOURCES),$(wildcard *))
CLEAN_FILES := $(filter-out Makefile,$(CLEAN_FILES))

build: $(SOURCES)
    YOUR_RECIPE_HERE

clean:
    rm -rf $(CLEAN_FILES)
1
27.01.2020, 21:14

Вам нужно включить extglob на:

shopt -s extglob
4
27.01.2020, 21:14

В bash некоторые шаблоны не включены по умолчанию, но их можно включить, установив параметр с помощью shopt . Шаблоны ! (НЕ ЭТО) , @ (ЭТО | ТО) , * (НУЛЬ-ИЛИ-БОЛЬШЕ) , + (ОДИН- ИЛИ-БОЛЬШЕ) и ? (НЕОБЯЗАТЕЛЬНО) , которых не было в ранних оболочках Unix, позже были добавлены в ksh и не стандартизированы POSIX, не распознаются по умолчанию, вы сначала нужно запустить shopt -s extglob .

Вы можете использовать эти шаблоны в командной строке; это означает, что у вас есть shopt -s extglob в вашем .bashrc . Этот файл читается только интерактивными оболочками, а не скриптами.

(Если переменная среды BASH_ENV установлена, когда bash запускает скрипт, то bash читает указанный им файл, но я не рекомендую полагаться на это, потому что это заставит ваш скрипт работать только когда BASH_ENV установлен на ожидаемое значение, и только если вы не меняете файл, на который он указывает.)

Просто включите shopt -s extglob вверху вашего скрипта под строкой #! / bin / bash .

1
27.01.2020, 21:14

Теги

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