Вы используете круглые скобки и чередование - это zsh-специфическая конструкция.Он не работает в других оболочках, включая zsh в режиме совместимости с sh.
Если вы хотите продолжать использовать эту конструкцию, вам придется вызывать zsh как zsh (предположительно, заменив #!/bin/sh
на * 1004).* или что-то подобное).
Если вам нужен скрипт для запуска на ksh, используйте #!/bin/ksh
или #!/usr/bin/env ksh
и
cp /somedire/*.@(txt|xml|xsd) /destination/dir/
Если вам также нужна поддержка bash, тота же команда с @
будет работать при условии, что вы сначала выполните следующие команды:
shopt -s extglob 2>/dev/null ## tell bash to parse ksh globbing extensions
setopt ksh_glob 2>/dev/null ## tell zsh to parse ksh globbing extensions
Если вам нужна совместимость с POSIX sh, вам придется использовать три отдельные команды и подготовить сообщение об ошибке, еслини одно из трех расширений не имеет соответствия.Более надежное решение будет использовать find:
find /somedire -name /somedire -o -type d -prune -o \
\( -name '*.txt' -o -name '*.xml' -o '*.xsd' \) \
-exec sh -c 'cp "$@" "$0"' /destination/dir {} +