Редактировать bash_profile?

3126
JD Isaacks

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

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

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

myfunc() { echo "function ran" } 

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

me @ host: ~ $ myfunc

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

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

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

1
Вы на своем собственном ящике, или системном ящике (например, в школе, на работе?). Кроме того, коробка ванильная или индивидуальная? может помочь в диагностике Roy Rico 13 лет назад 0
Сразу после создания вашего .profile он не сразу реализуется. Запустите новую оболочку или введите `source ~ / .profile` Jarvin 13 лет назад 3
@Roy Я администратор, я установил ОС и все. Но я в целом n00b в Linux. JD Isaacks 13 лет назад 0
@Dan: Он сказал, что вышел и вернулся. Dennis Williamson 13 лет назад 0

3 ответа на вопрос

4
garyjohn

Ваш ~ / .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.

Функция может быть экспортирована (но, как вы сказали, не по умолчанию). Dennis Williamson 13 лет назад 0
2
BloodPhilia

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

function myfunc() 

ВОЙТИ

{ 

ВОЙТИ

echo "function ran" 

ВОЙТИ

} 

ВОЙТИ

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

$ myfunc 

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

unset -f myfunc 

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

Это сработало. Интересно, почему добавления в файл нет. JD Isaacks 13 лет назад 0
@john поместил `echo, определяющий функции john now` в ваши файлы, чтобы увидеть, когда они определяются. Вы, вероятно, хотите, чтобы они были в вашем `~ / .bashrc` msw 13 лет назад 1
@ MSW Я не уверен, что вы имеете в виду. `эхо, определяющее функции Джона сейчас` Может быть, уточнить свой ответ? Но я попытался добавить его в .bashrc, и он не дал мне ошибки, но и не вывел. Просто перешел на следующую строку, как будто я просто нажал `enter` JD Isaacks 13 лет назад 0
@ Джон, пожалуйста, прочитай. Учитывая ваше резюме и достижения, эти вопросы, кажется, под вами. Вы явно не глупы, и невежество можно исправить. Если вы можете понять Illustrator, bash должен быть легким для сравнения, но все же нужно сделать предварительную домашнюю работу. http://tldp.org/LDP/Bash-Beginners-Guide/html/ Мир. msw 13 лет назад 0
[`function foo ()` - это плохо.] (http://mywiki.wooledge.org/BashPitfalls#function_foo.28.29) grawity 13 лет назад 0
1
Anders

Чтобы увидеть, какие файлы выполняются в каком порядке, вы можете поместить в эти файлы команду 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.