Intereting Posts
Все USB-порты обнаружены как USB 1.0, а не USB 2.0 Простой сценарий bash для резервного копирования и удаления каталогов Интерпретация восьмеричного дампа без параметров CentOS 7 не может очистить монтировку привязки с помощью rbind и rslave Каковы нечитаемые символы в сценарии установки Linux Anaconda? Настраиваемая панель вкладок или богатый функциональный эмулятор терминала Openssl передает двоичную пропущенную фразу в качестве аргумента Как реплицировать данные из / dev / log на несколько приемников rsyslog Ошибка с if : Слишком много аргументов Как загружается средняя работа с современными процессорами? AWK для сглаживания данных Отсутствует файл tar в файле изменений после сборки пакета Debian USB-джойстик поддерживает строительство VICE от источника? Можно ли получить доступ к аппаратным средствам непосредственно из пользовательского пространства? Зашифрованная домашняя папка и электронная почта

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

Если у меня есть файл, который содержит функцию foo и у меня есть следующий stream:
Скрипт A – sources файла, который имеет foo и вызывает foo .
Затем сценарий A выполняет другой файл сценария, который также вызывает foo . Этот второй сценарий также содержит тот же файл.
Мне было интересно, есть ли способ условно получить файл во втором сценарии или нет никакого влияния, и этот подход является обычным?

Если скрипт A выполняет что-то еще, то эта программа не наследует определения функций. Bash имеет малоизвестную функцию для экспорта функций через среду. Это было в основном неизвестно до тех пор, пока не возникла уязвимость в реализации. Если вы действительно хотите, вы можете экспортировать функции с помощью export -f , но лучше просто определить функции, которые вы хотите использовать, а не полагаться на эти функции, присутствующие в среде.

Как уже объяснил RalfFriedl, может ли это оказать какое-то влияние, зависит от того, что на самом деле выполняется внутри исходного скрипта. Поскольку вы не сообщили нам содержание этого сценария, мы не можем сказать, оказывает ли это влияние или нет.

В любом случае, я бы посчитал плохим дизайном проводить подобные проверки во вторых скриптах. Сценарии с исходным кодом должны быть написаны таким образом, чтобы они были идемпотентными – мне нужно разрешать исходный текст сценария так часто, как мне нравится, без какого-либо наказания.

Есть несколько вещей, которые мы хотим «случиться только один раз». Типичным случаем является добавление чего-либо, например, PATH или LD_LIBRARY_PATH . Если мы поставим скрипт несколько раз, путь будет длиннее и длиннее. Если мы хотим избежать этого, защита должна входить в исходный сценарий, а не в исходный. Шаблон, который я часто использую, выглядит так:

 # Put /foo/bar on top of PATH : ${_src_xyz_version:=1} if [[ ${_SRC_XYZ:=0} != $_src_xyz_version ]] then export _SRC_XYZ=$_src_xyz_version export PATH=/foo/bar:$PATH fi 

В этом случае после расширения PATH повторный запуск сценария в моем процессе или в любом subprocessе не изменяет PATH повторно, если только процесс явно не изменяет запросы, выполняя

 export _SRC_XYZ=0