Я хотел бы знать, в чем разница между файлами .bashrc
и теми .bash_profile
, которые обычно идут в доме пользователей в операционных системах Linux или Mac OS.
Если они одинаковые, может ли у вас быть только один из этих файлов?
В моем случае у меня дома есть только файл .bash_profile, и мне нужно выполнить следующую команду:
echo PATH=\"\$NPM_PACKAGES/bin\:\$PATH\" >> ${HOME}/.bashrc
Будет ли то же самое, если я изменю его на следующее?
echo PATH=\"\$NPM_PACKAGES/bin\:\$PATH\" >> ${HOME}/.bash_profile
.bash_profile
он запускается только один раз, когда вы входите в систему..bashrc
выполняется каждый раз, когда вы запускаете интерпретаторbash
.При выполнении первой команды, если файл
.bashrc
не существует, он будет создан. Если он уже существует, строка добавляется в конец.Из-за назначения строки, которую вы хотите добавить, лучше добавить ее в файл
.bashrc
.Традиционно, когда вы входите в систему Unix, система открывает для вас программу. Эта программа является оболочкой, то есть программой, предназначенной для запуска других программ. Это оболочка командной строки: вы запускаете другую программу, вводя ее имя. Оболочка по умолчанию, оболочка Bourne, считывает команды,
~/.profile
когда она вызывается оболочкой входа в систему.Bash — оболочка типа Bourne. Чтение команд
~/.bash_profile
при вызове в качестве оболочки входа в систему. И если этот файл не существует¹, попробуйте прочитать~/.profile
.Вы можете вызвать оболочку напрямую в любое время. Например, запуск эмулятора терминала в среде с графическим интерфейсом. Если оболочка не является оболочкой входа в систему, не читайте файлы
~/.profile
. Когда вы запускаете bash как интерактивную оболочку (то есть не для запуска скрипта), он читает~/.bashrc
(за исключением случаев, когда он был вызван как оболочка входа в систему, и в этом случае он только читает~/.bash_profile
или~/.profile
).Так:
~/.profile
это файл, в котором сохраняются вещи, относящиеся ко всему сеансу, такие как программы, которые вы хотите запускать при входе в систему (но не графические программы, поскольку они находятся в другом файле) и определения переменных среды.~/.bashrc
это файл для хранения вещей, которые применяются только к самому bash, например, псевдонимы и определения функций, а также настройки подсказок. (Вы также можете указать здесь привязки клавиш, но в bash они обычно помещаются в~/.inputrc
).~/.bash_profile
можно использовать вместо~/.profile
, но он читается только bash, а не другими оболочками. (Это важно отметить, если вы хотите, чтобы ваши файлы инициализации работали на разных машинах, а bash не является оболочкой входа для всех из них.) Логично включить это место,~/.bashrc
если оболочка интерактивная. По этой причине я рекомендую указать следующее~/.bash_profile
:В современных системах UNIX есть дополнительная сложность, связанная с
~/.profile
. Если вы входите в графическую среду (то есть, если программа, в которой вы вводите пароль, работает в графическом режиме), вы не получаете автоматически оболочку входа в систему, которая читается как~/.profile
. В зависимости от графической программы входа в систему, оконного менеджера или среды рабочего стола, которую вы запускаете позже, и от того, как ваш дистрибутив настраивает эти программы, вы~/.profile
можете читать, а можете и нет. Если он не читается, обычно есть другое место для определения переменных среды и программ, запускаемых при входе в систему, но, к сожалению, это место не имеет стандартного местоположения.Обратите внимание, что вы можете прочитать здесь и там рекомендации по размещению определения переменных среды
~/.bashrc
или запуску оболочек входа в систему на терминалах. Обе идеи плохие. Самая распространенная проблема с этими идеями заключается в том, что ваши переменные окружения будут устанавливаться только в программах, запускаемых из терминала, но не в тех, которые запускаются напрямую иконкой, через меню или каким-то сочетанием клавиш.¹ Если
.bash_profile
он не существует, bash также пытается выполнить его.bash_login
перед попыткой.profile
. Не стесняйтесь забыть, что он существует.~/.bashrc — это место для размещения вещей, которые относятся только к самому bash, таких как псевдонимы и определения функций, параметры оболочки и системные настройки. (Вы также можете поместить туда ключевые ссылки, но для bash они обычно находятся в ~/.inputrc.)
~/.bash_profile можно использовать вместо ~/.profile, но он читается bash, а не какой-либо другой оболочкой. (Это больше беспокоит, если вы хотите, чтобы файлы инициализации работали на нескольких машинах, а ваша оболочка входа не была bash на всех из них.) Это логическое место для включения ~/.bashrc, если это ваша интерактивная оболочка. Я рекомендую следующий контент в ~/.bash_profile: