Назад | Перейти на главную страницу

функция не работает при использовании в файле сценария. отображается ошибка команда не найдена

Я использую rhel 5. Я изучаю сценарии оболочки. Я создал функцию с именем

vi / etc / bashrc (чтобы я мог использовать эту функцию даже после выхода из системы)

currenttime()
{
echo -e "Current time is `date`";
echo -e "Calendar Of this month is `cal`";
echo -e "Good Bye Mr.$USER ..Have good day";
}

Теперь, если я использую эту функцию как обычно, проблем нет. Но когда я использую эту функцию в файле сценария и пытаюсь выполнить этот сценарий. Теперь он показывает ошибку currenttime команда не найдена

Vi my_script

currenttime 

chmod +x my_script
sh my_script
currenttime command not found.

Теперь я не могу понять, нормально ли работает currenttime, например #currenttime ----- работает нормально

Но если я использую его в файле, он показывает ошибку. Вы можете объяснить логику этого?

Вы должны загрузить /etc/bashrc в вашем пользовательском скрипте, поскольку этот файл и ~/.bashrc загружается только для интерактивных оболочек.

#!/bin/bash
source /etc/bashrc
currenttime

@выше

Вы правы, сэр ... у меня есть еще немного экспликации. Это как

Вы можете использовать свою функцию, когда используете интерактивную оболочку (например, когда вы работаете с CLI). Это потому, что / etc / bashrc он загружается всеми интерактивными оболочками при запуске (если, конечно, ваш дистрибутив был настроен таким образом).

Но вы не можете использовать ту же функцию в своих скриптах. И это потому, что ваши скрипты ничего не знают о вашей функции. / etc / bashrc он используется только для интерактивных оболочек, а не для неинтерактивных оболочек (т.е. подоболочек, порожденных для выполнения сценария).

Вы должны создать / etc / bashrc вручную, или включить код функции в свои сценарии, или записать код функции в другом сценарии, который впоследствии может быть получен из других сценариев.