Mogę uruchomić to polecenie z wiersza polecenia:
cp -r folder/!(exclude-me) ./
Aby rekurencyjnie skopiować całą zawartość z folder
wyjątkiem podanego podkatalogu exclude-me
do bieżącego katalogu. Działa to dokładnie zgodnie z przeznaczeniem. Potrzebuję tego jednak do pracy w skrypcie bash, który napisałem, gdzie mam to:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Ale kiedy uruchamiam skrypt:
bash my-script.sh
Rozumiem:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
Nie wiem, dlaczego działa z wiersza polecenia, ale dokładnie ta sama linia nie działa w skrypcie bash.
bash
shell-script
nzifnab
źródło
źródło
env > file1
w skrypcie i wykonywać./it
, a następnieenv > file2
isource it
, w nadziei, że znalazłem różnicę wenv
s, co nie jest prawdą. Jak mogę programowo wymienić wszystkie różnice między dwiema powłokami (w tym przypadku interaktywne vs nieinteraktywne)?Dodaj tę linię u góry skryptu:
!(...)
jest rozszerzoną funkcją dopasowania wzorca, musiszextglob
włączyć opcję, aby z niej korzystać. Zobacz wbudowane shopt, aby uzyskać więcej informacji.źródło