Мой .bashrc
файл экспортирует функцию с именем lookup
:
lookup() {
grep -r -ne "$1" * | grep -v "TAGS:" | grep -v "tags:"
}
export -f lookup
Я могу использовать эту функцию в оболочке. Но если я вставлю это в такой сценарий:
#!/bin/bash
lookup "foo"
и запустите сценарий, затем bash сообщает "команда не найдена" для lookup
. Некоторое время назад это работало. Я сильно подозреваю, что это перестало работать после обновления безопасности bash в моей системе (возможно, связано с shellshock / bashdoor?) Моя версия bash - 4.1.10 (1) на openSUSE 11.4
Проверьте http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
Вызывается не интерактивно
Когда Bash запускается в неинтерактивном режиме, например, для запуска сценария оболочки, он ищет переменную BASH_ENV в среде, расширяет ее значение, если оно появляется там, и использует расширенное значение как имя файла для чтения и выполнения. .
В частности, ни один из ~ / .bashrc, ~ / .profile, ~ / .bash_profile НЕ является источником. ~ / .bashrc вызывается только в том случае, если оболочка является интерактивной оболочкой.
У вас есть несколько вариантов:
явно укажите свой .bashrc
#!/bin/bash
. ~/.bashrc
lookup "foo"
запустить bash с интерактивным флагом
#!/bin/bash -i
lookup "foo"
установите переменную BASH_ENV при запуске скрипта:
BASH_ENV=$HOME/.bashrc /path/to/my/script