Интересный вопрос сегодня залетел:
Давай посмотрим что происходит в кишках в это время. Давненько мы с тобой в strace не смотрели.
Предположим есть Bash-скрипт с функциями:
functions.sh
#!/bin/bash
bashdays_function() {
echo "Hello from BashDays"
}
И основной скрипт, который сорсит файл с функциями:
test_script.sh
#!/bin/bash
source ./functions.sh
bashdays_function
bashdays_function
Не забываем сделать: chmod +x test_script.sh.
Запускаем test_script.sh под контролем strace:
strace -e trace=openat ./test_script.sh
И видим:
openat(AT_FDCWD, "./test_script.sh", O_RDONLY) = 3
openat(AT_FDCWD, "./functions.sh", O_RDONLY) = 3
Hello from BashDays
Hello from BashDays
То есть в контексте скрипта test_script.sh файл с функциями был прочитан один раз.
При втором вызове функции всё считалось из памяти.
Если бы файл functions.sh читался каждый раз, то мы увидели бы несколько строчек openat(AT_FDCWD).
test_script.sh подключенный файл через source будет прочитан один раз.Вроде очевидно, но порой заставляет задуматься.
Изучай!








Комментарии