Я читал какой-то текст, и там говорилось:
Файл конфигурации оболочки .bashrc фактически выполняется каждый раз, когда вы генерируете оболочку BASH, например, когда вы запускаете скрипт оболочки. Другими словами, каждый раз, когда создается подоболочка, выполняется файл .bashrc. Это приводит к экспорту любых локальных переменных или псевдонимов, которые вы определили в файле инициализации оболочки .bashrc.
Я также читал, что каждый раз, когда я запускаю скрипт оболочки (скажем,скрипт1.sh), создается подоболочка. Поэтому, когда создается эта подоболочка,.bashrcфайл должен быть выполнен и, таким образом, псевдонимы определены в.bashrcдолжны быть доступны в подоболочке (которых нет). И если псевдонимы не доступны в этой подоболочке, то как они доступны в основной оболочке (через которую я выполняю свой скрипт)?
решение1
Правильно, в оболочке bash Linux вы можете сказать:
source /path/to/my_lib.sh
для загрузки ваших алиасов defs из файла. Или, для снижения сложности, вы можете просто скопировать эти алиасы defs в ваш скрипт bash.
Но подождите! Это создаст только псевдонимы, вероятно, с
alias foo3 foo9 # describe these two aliases: declare errors if one doesn't exist
Вам понравятся ваши новые определения псевдонимов, но их запуск завершится ошибкой, пока вы не включите расширение псевдонимов с помощью:
shopt -s expand_aliases # alias xpn ON
Также рассмотрите:
shopt -u expand_aliases # alias xpn OFF
или
shopt expand_aliases # query whether
или
unalias foo3 foo9 # delete these aliases
решение2
Если вы определили псевдонимы script1.sh
и хотите, чтобы они были доступны везде, добавьте в свой .bashrc
файл:
source /path/to/script1.sh
или альтернативно:
. /path/to/script1.sh
Чтобы избежать ошибки в случае отсутствия скрипта, можно использовать:
if [ -f /path/to/script1.sh ]; then source /path/to/script1.sh; fi
То же самое работает для любых функций, которые вы определяете в script1.sh
.