1

Я пытаюсь научиться Bash. Я использую Ubuntu.

Я хочу добавить функцию. Я не уверен, что мне нужно создать файл .profile или .bash_profile поэтому я создаю оба файла в каталоге ~/ .

Я добавляю что-то вроде этого в каждом:

myfunc()
{
    echo "function ran"
}

Я выхожу из своего пользователя и снова вхожу, я запускаю это в командной строке:

me @ host:~ $ myfunc

который просто возвращает:

myfunc: команда не найдена

Не уверен, что я делаю не так.

3 ответа3

4

Ваш ~/.profile или ~/.bash_profile получены из процесса входа в систему. Оболочка, которую вы запускаете в окне терминала, запускается в другом процессе, который является потомком процесса входа в систему. Некоторые параметры, заданные процессом входа в систему, экспортируются в дочерние процессы, но псевдонимы и определения функций - нет. Вместо этого псевдонимы и функции должны быть определены в файле rc вашей оболочки, в данном случае ~/.bashrc. Этот файл создается каждым интерактивным процессом bash.

Что касается того, нужно ли вам помещать настройки переменных среды и другой стартовый код в ~/.profile или ~/.bash_profile, man bash говорит, что оболочки входа ищут ~/.bash_profile, ~/.bash_login и ~/.profile в этот порядок, и прочитайте первый найденный. Поэтому, если у вас есть ~/.bash_profile и ~/.profile, будет прочитан только ~/.bash_profile, а ~/.profile будет проигнорирован. То, что вы используете, зависит от вас, но если вы планируете использовать другие оболочки, кроме bash, вы можете поместить свои настройки в ~/.profile и удалить ~/.bash_profile.

2

В командной строке просто введите:

function myfunc()

ВОЙТИ

{

ВОЙТИ

echo "function ran"

ВОЙТИ

}

ВОЙТИ

Вызовите функцию, набрав ее следующим образом:

$ myfunc

Удалите функцию, используя:

unset -f myfunc

Проверьте это для получения дополнительной информации:

1

Чтобы увидеть, какие файлы выполняются в каком порядке, вы можете поместить в эти файлы команду singel echo или printf. Тогда вы увидите, когда они будут выполнены.

# You could try this
echo "This will be printed"
printf "This will also be printed (%d)\n" 10

Чтобы увидеть, как работает echo и print, вы должны использовать команду man(1) и заглянуть на страницу man для bash(1). В скобках после команд указано, в каком разделе руководства вы найдете информацию. 1 означает обычную команду. Вы должны попробовать эти команды:

man man
man -k manual
man bash

На странице руководства по bash найдите раздел "КОМАНДЫ ПОСТРОЕНИЯ ОБОЛОЧКИ" (попробуйте / и напишите, что вы ищете, или используйте пробел). Здесь есть информация о командах, встроенных в bash, например, echo и printf.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .