Я считал, что должен поместить команду
shopt -s extglob
в .bashrc
для использования !(XYZ)
как подстановочное расширение для всего в текущем каталоге кроме XYZ. Тестирование указало на это
cp -aruv !(XYZ) $target
действительно скопированный все от текущего каталога до $target кроме подкаталога XYZ. Затем я включал оператор CP в сценарий удара. Сценарий умер в операторе CP с сообщением об ошибке
cp: invalid option --'h'
который я не могу объяснить. Я добавил команду shopt к своему сценарию и получил тот же результат.
Я нашел, что это подстановочное расширение в "Вашем UNIX" Десятью кубометров с комментарием добавило shopt оператор к .bashrc. Я не нахожу shopt
или в человеке или в информации.
Любая справка ценилась бы для получения корректного подстановочного расширения в положении сценария удара и на том, где найти информацию о команде shopt.
Были вопросы о моем сценарии, на который я пытался ответить, но делал так в неправильном месте. Существуют части сценария.
#!/bin/bash
if shopt -s extglob
then
echo "shopt was successful"
else
echo "shopt was not successful"
exit -1
fi
После этих операторов цикл, в котором цель и источник установлены и протестированы, чтобы обеспечить, чтобы они указали на каталоги. Затем код, который перестал работать
cd $source
cp -aruv !(XYZ) $target
Снова я указываю на это, если я поставил цель и источник из командной строки и затем
cd $source
cp -aruv !(XYZ) $target
копия работает, как я ожидаю. Я могу сделать это другие пути, но хотел бы понять, почему это не работает в моем сценарии и как зафиксировать его.
Если Вы используете Ubuntu по умолчанию ~/.bashrc
файл, затем расширенный globbing включен default1 для интерактивных оболочек - который является, почему он работает над командной строкой.
В сценарии однако, необходимо будет включить его с
shopt -s extglob
shopt
документируется в man bash
под SHELL BUILTIN COMMANDS
раздел, или через справку оболочки онлайн
help shopt
1, хотя скорее непрозрачно, через завершения удара. Посмотрите, например, Где удар “shopt extglob” включен для моей интерактивной оболочки?