Aby utworzyć alias dla terminala w systemie OS X, możesz umieścić aliasy w .bash_profile
lub .bashrc
. Jaka jest różnica między nimi i dlaczego miałbym wybierać aliasy w jednym, a nie w drugim?
terminal
command-line
bash
daviesgeek
źródło
źródło
brew install bash
korzystasz z iTerm2, możesz ustawić,profile -> command
do/usr/local/bin/bash
którego.bashrc
domyślnie ładuje się później.bash_profile
. To daje ci także Bash 4 gadżety ...Odpowiedzi:
.bash_profile
jest wykonywany dla powłok logowania, podczas gdy.bashrc
jest wykonywany dla interaktywnych powłok bez logowania.Podczas logowania (wpisz nazwę użytkownika i hasło) przez konsolę, albo siedząc przy komputerze, albo zdalnie przez ssh:
.bash_profile
wykonywane jest skonfigurowanie powłoki przed pierwszym wierszem poleceń.Ale jeśli już zalogowałeś się do komputera i otworzyłeś nowe okno terminala (xterm), to
.bashrc
zostanie ono wykonane przed wierszem polecenia okna..bashrc
jest również uruchamiany po uruchomieniu nowej instancji bash przez wpisanie/bin/bash
terminala.W systemie OS X Terminal domyślnie uruchamia powłokę logowania za każdym razem, więc różni się to nieco od większości innych systemów, ale można to skonfigurować w preferencjach.
źródło
On OS X, Terminal by default runs a login shell every time
- Zawsze byłem tak zdezorientowany, że nie zdawałem sobie z tego sprawy. Świetna informacja!.zprofile
uruchamia się za każdym razem.X11 będzie patrzeć na ciebie,
.bashrc
podczas gdy będzie wyglądał „zwykły” terminal.bash_profile
Jeśli jednak dodasz następujące elementy
.bash_profile
, możesz przenieść wszystko do.bashrc
pliku, aby skonsolidować wszystko w jednym miejscu zamiast dwóch:źródło
cd ~ ; ln -s .bashrc .bash_profile
.~/.bash_profile
). Często konieczne jest także definiowanie przyrostowe na każdym poziomie powłoki (~/.bashrc
). Nie jest najlepszym pomysłem, aby tłumić tę wolność.~/.bash_profile
dla każdego nowego okna / karty, więc tak naprawdę nie ma sposobu na rozdzielenie tych dwóch, jeśli chodzi o Terminal..bash_profile
nigdy nie można ponownie uzyskać w procesie potomnym. Każdy poziom zagnieżdżonych źródeł Bash.bashrc
, więc jeśli umieścić cośexport A=a:$A
w.bashrc
, twój$A
dostanie już w pod-Basha. Zazwyczaj zostawiam zmienne środowiskowe w profilu, a aliasy w RC.W przypadku systemu macOS kod, który należy umieścić,
.bash_profile
aby skonsolidować wszystko,.bashrc
jest następujący:Jest to bardziej szczegółowe dla użytkownika terminala Mac.
źródło
TLDR; użyj
.bash_profile
do swoich aliasów.Sposób, w jaki różne pliki inicjujące współpracują ze sobą, jest nieco bardziej skomplikowany i istnieją pewne ważne specjalne przypadki w OSX. Oto najważniejsze informacje:
.bash_profile
jest wywoływana. Zatem powyższa rada TLDR..bashrc
jest również opcją, ale będzie wywoływana za każdym razem, gdy utworzysz podpowłokę (tj. wywołajbash
), co może spowodować nieefektywność, jeśli zaktualizujesz zmienną w niej (np.PATH=/bin/foo:$PATH
).bashrc
od.bash_profile
są dość powszechne. Nie polecam tego, ale jest to preferencja.źródło
.bash_profile
aliasów jest skomplikowane? Pozycje, które wymieniasz tylko częściowo, w ogóle dotyczą aliasów, więc zamiast tylko wypunktować niektóre pociski, które mogłyby wyjaśnić, dlaczego wydaje się to skomplikowane, czy możesz zaproponować sposób, aby ułatwić to w tych ograniczeniach?