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

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

2 Solutions collect form web for “Является ли использование исходного файла, уже полученного в родительском скрипте, необязательным?”

Если скрипт 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 
  • Как проверить параметр zsh-скрипта в шаблоне или нет?
  • Хотите скачать резервную копию моей базы данных через скрипт bash
  • Объединение реляционных операторов с grep -q в инструкции IF оболочки?
  • Использовать ли `xargs` аргументы, которые он получает каждый вместо каждых аргументов` -n`?
  • Как вывести необходимые записи из файла CSV в новый файл и подсчитать количество записей?
  • Как извлечь строки из исходного файла со ссылочным файлом, добавить в файл результатов?
  • Скрипт, пропускающий столбец
  • Как проверить синтаксис в задании cron
  • Cronjob не будет работать правильно
  • Что я тут делаю не так (проблема с петлями)
  • Как передать значение переменной из функции в вызывающую процедуру в Shellscript
  • Linux и Unix - лучшая ОС в мире.