Подстановочное расширение, которое работает над командной строкой, но не в сценарии удара

Я считал, что должен поместить команду

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

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

0
задан 14 July 2018 в 09:15

1 ответ

Если Вы используете Ubuntu по умолчанию ~/.bashrc файл, затем расширенный globbing включен default1 для интерактивных оболочек - который является, почему он работает над командной строкой.

В сценарии однако, необходимо будет включить его с

shopt -s extglob

shopt документируется в man bash под SHELL BUILTIN COMMANDS раздел, или через справку оболочки онлайн

help shopt

1, хотя скорее непрозрачно, через завершения удара. Посмотрите, например, Где удар “shopt extglob” включен для моей интерактивной оболочки?

3
ответ дан 28 October 2019 в 08:47

Другие вопросы по тегам:

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