У меня проблема с строкой кода в моем Makefile, который хорошо работает в /bin/bash
. Я знаю, что Make работает в /bin/sh
, поэтому у меня есть solved that problem with this guide, объявив, что я хочу, чтобы он запускался в Bash. Однако, несмотря на то, что я запускаю Make in Bash, я все еще не могу заставить эту строку работать, даже жестко она работает в Bash просто отлично.Почему не будет поддержки bash! (...) при выполнении через make (w/SHELL: =/bin/bash)?
Почему Bash выдает ошибку при запуске rm -f !(2).txt
в Makefile, но не при выполнении в своей оболочке?
EDIT: Я ищу, чтобы удалить все файлы с определенным расширением файла, за исключением одного из этих файлов. Команда
rm -f !(2).txt
does just that в моем терминале bash, но не в Make.EDIT: При запуске
rm -f !(2).txt
«нормально» в терминале с Баш (терминал возвращаетсяbash
при выдаче командыecho "$0"
) он работает просто отлично, но сывороточный я бегу/bin/bash -c 'rm -f !(2).txt'
я получаю ту же ошибку, что и в Makefile.
Makefile
all: clean
clean: SHELL:=/bin/bash
clean:
rm -f !(2).txt
Запуск команды в Bash
$ ls
1.txt 2.txt 3.txt 4.txt Makefile # Directory has all text files
$ rm -f !(2).txt # Remove all text files but 2.txt
$ ls
2.txt Makefile # Only 2.txt is not removed
Запуск команды в Bash через Makefile
$ ls # Directory has all text files
1.txt 2.txt 3.txt 4.txt Makefile
$ make clean # Running make
rm -f !(2).txt
/bin/bash: -c: line 0: syntax error near unexpected token `('
/bin/bash: -c: line 0: `rm -f !(2).txt'
make: *** [clean] Error 1
Вам также нужно «shopt -s extglob». – choroba
Если я запускаю вашу команду из оболочки, она терпит неудачу так же, как при вызове из make: '/ bin/bash -c 'echo! (2).txt'' -> '/ bin/bash: -c: строка 0: синтаксическая ошибка около неожиданного токена '('' – MadScientist
@MadScientist Weird. Запуск так, как вы закончили с той же ошибкой. Однако запуск его только в моем терминал возвращает мне ожидаемый результат. Мой терминал возвращает 'bash', когда я запускаю' echo '$ 0 "', так что может быть hickup? –