Чтобы создать псевдоним для терминала в OS X, вы можете поместить псевдонимы в .bash_profile
или .bashrc
. В чем разница между ними и почему я решил использовать псевдонимы в одном, а не в другом?
.bash_profile
выполняется для оболочек входа в систему, а .bashrc
выполняется для интерактивных оболочек без входа в систему.
Когда вы входите в систему (вводите имя пользователя и пароль) через консоль, либо сидя за компьютером, либо удаленно через ssh: .bash_profile
выполняется настройка вашей оболочки перед начальной командной строкой.
Но, если вы уже вошли в свой компьютер и открыли новое окно терминала (xterm), то .bashrc
выполняется до командной строки окна. .bashrc
также запускается, когда вы запускаете новый экземпляр bash, вводя /bin/bash
терминал.
В OS X Терминал по умолчанию каждый раз запускает оболочку входа в систему, так что это немного отличается от большинства других систем, но вы можете настроить это в настройках.
On OS X, Terminal by default runs a login shell every time
- Я всегда был так сбит с толку, не осознавая этого. Отличная информация!.zprofile
запускается каждый раз.[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
от ~/.bash_profile
до ~/.bashrc
. Кажется, что RVM устанавливается так, как если бы он всегда устанавливался на Mac. Предполагается, что каждый раз, когда терминал запускается, это будет оболочка входа в систему. Если вы используете свой компьютер по-другому, когда вы входите в систему только один раз, вам нужно настроить некоторые вещи.~/.bash_profile
или ~/.profile
как уже упоминалось, но если вы создадите новый bash, используя что-то вроде exec bash
или bash
из этого нового окна/вкладки, он будет только искать и исходить ~/.bashrc
. Чтобы избежать этого, используйте exec bash -l
или bash -l
для порождения нового bash в качестве оболочки для входа в систему, которая затем будет искать файлы .bash_profile/.profile
. То же самое для новых окон, созданных в tmux/screen, они будут иметь только исходный код ~/.bashrc
.X11 будет смотреть на вас , в .bashrc
то время как «обычный» Терминал будет смотреть на.bash_profile
Однако, если вы добавите следующее в свой .bash_profile
, вы сможете переместить все в свой .bashrc
файл, чтобы объединить все в одном месте вместо двух:
if [ -f $HOME/.bashrc ]; then
source $HOME/.bashrc
fi
cd ~ ; ln -s .bashrc .bash_profile
.~/.bash_profile
). Также часто необходимо иметь вещи, которые нужно определять постепенно на каждом уровне оболочки ( ~/.bashrc
). Предлагать подавить эту свободу — не лучшая идея.~/.bash_profile
для каждого нового окна/вкладки, поэтому на самом деле нет способа разделить их в том, что касается терминала..bash_profile
никогда не может быть получен снова в дочернем процессе. Каждый уровень вложенных источников Bash .bashrc
, поэтому, если вы поместите что-то вроде export A=a:$A
, .bashrc
ваш $A
вложенный Bash станет длиннее. Обычно я оставляю переменную окружения в профиле, а псевдонимы — в RC.. ~/.bashrc
, ) является ярлыком для source
, так что никакой разницы. См. unix.stackexchange.com/questions/114300/…source .bashrc
в Терминале, имея if [ -f $HOME/.bashrc ]; then source $HOME/.bashrc fi
дубликаты .bash_profile
любых путей, которые вы добавили в .bashrc
.Для macOS код, который нужно добавить .bash_profile
для объединения всего .bashrc
, выглядит следующим образом:
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
Это более конкретно для пользователя терминала Mac.
TLDR; используйте .bash_profile
для своих псевдонимов.
То, как разные файлы инициализации работают вместе, немного сложнее, и в OSX есть несколько важных особых случаев. Вот основные моменты:
.bash_profile
она вызывается. Таким образом, совет TLDR выше..bashrc
также вариант, но он будет вызываться каждый раз, когда вы создаете подоболочку (например, вызываете bash
), что может привести к неэффективности, если вы обновите переменную внутри нее (например, PATH=/bin/foo:$PATH
).bashrc
из .bash_profile
которых звонят, довольно распространены..bash_profile
псевдонимов сложно? Элементы, которые вы перечисляете лишь частично, вообще касаются псевдонимов, поэтому вместо того, чтобы просто перечислять некоторые маркеры, которые могут объяснить, почему это кажется сложным, вы можете предложить способ упростить его в рамках этих ограничений?Для ubuntu/debain я добавляю этот код в конце .bashrc
:
if [ -f ~/.bash_profile ]; then
source ~/.bash_profile
fi
Теперь мои псевдонимы действуют во всех новых открытых терминалах (или вкладках)
bmike
Яаков Барух
Рэй Фосс
brew install bash
используете iTerm2, вы можете установитьprofile -> command
, какой из/usr/local/bin/bash
них будет загружаться.bashrc
по умолчанию после.bash_profile
. Это также дает вам вкусности Bash 4 ...Квази Ирфан
.bash_profile
, это потому, что с macOS Catalina переключилась сbash
наzsh
; поэтому теперь вы должны использовать.zprofile
вместо.bash_profile
.