Lidé získávají bash_profile z bashrc místo naopak kvůli místním zvyklostem .
Všechny názory že jsem četl o tom, jak se konfigurují jejich spouštěcí soubory v 01
vychází především z místních konvencí. Místní konvence se obvykle nezmiňují o celkovém obrazu v tom, že se moc nemluví o případu nepřihlašování a neinteraktivity. Legrační na tom je, že jsem se podíval, ale málokdy vidím někoho zmínit 14
ve všech jejich řečech o tom, proč umístit proměnné do jednoho spouštěcího souboru oproti druhému. Ve skutečnosti jsem neslyšel ani jeden komentář, který by řekl:"/bin/sh existuje z nějakého důvodu. Bash emuluje původní Bourne shell, /bin/sh, když je jako takový vyvolán." "Za prvé, a to trochu odbočím, tento případ je důležitý pro lidi, kteří s shellem nepracují pouze interaktivně, ale kteří poskytují neinteraktivní, bez přihlašování (bezobslužné nebo pozadí ) 26
skripty, které vyžadují minimální zpracování shellu, tj. zpracování na pozadí nevyžaduje jemné barevné výzvy, historii a substituci příkazů, správně definovanou proměnnou $TERM atd.
Dále as ohledem na 32
, co obvykle vidím, jsou lidé, kteří vytvářejí minimální vyhledávací cesty nebo volají plně kvalifikované programy, a nevědí, jak se vypořádat s výstupem, který není připojen k terminálu (tj. neinteraktivní 42
bez přihlášení nebo 50
case) při práci s jejich 67
skripty. Je to obvykle proto, že dobré pochopení spouštěcí sekvence shellu není plně pochopeno, což vede k tomu, že uživatel implementuje své vlastní spouštěcí soubory způsobem, který je nekonzistentní nebo nekoherentní s konvencemi již zavedenými v místním 72 spouštěcí soubory.
Nastavení provedené místními konvencemi je uvedeno v této konkrétní instalaci a shellu 87
soubory. Pokud se podíváte na 99
libovolné instalace systému UNIX soubory, které jsou vyvolány jako součást typického 102
spouštěcí sekvence, pak by se měl vytvořit jejich vlastní start-up způsobem, který je komplementární s konvencí stanovenou v těchto 118
spouštěcí soubory.
Dokumentační projekt Linux uvádí:
/etc/skel/ V tomto adresáři jsou uloženy výchozí soubory pro každého nového uživatele. Pokaždé, když je přidán nový uživatel, jsou tyto základní soubory zkopírovány do jejich domovského adresáře. Průměrný systém by měl soubory:.alias, .bash_profile, .bashrc a .cshrc. Ostatní soubory jsou ponechány na správci systému.
Ačkoli 122
manuál nezmiňuje tyto soubory, které se běžně nacházejí v 139
adresář explicitně, co si pamatuji, SunOS, Solaris, RedHat, Ubuntu, HP-UX, umips a Ultrix mají 140
soubory k vytvoření vzoru spouštěcích souborů uživatelského prostředí. OSX jednoznačně ne – právě teď používám OSX 10.9.1. Bohužel vám OSX nedává moc co dělat, pokud jde o to, jak by věci měly být nastaveny z hlediska konvence, ale protože OSX je derivát BSD, jednoduše jsem použil jiný derivát BSD a vytvořil si vlastní 155 spouštěcí posloupnost poté, upravit ji tak, aby odpovídala místním konvencím používaným v OSX 10.9.1
162
spouštěcí soubory.
Důležitým bodem, který byl zmíněn v paralelním komentáři, je, že pro OSX je konvencí spouštět každý nový terminál jako interaktivní přihlašovací shell. Toto je skutečně výchozí nastavení v OSX. S touto konvencí není žádný problém, pokud jsou uživatelé instalace konzistentní. Výchozí chování terminálu v OSX lze změnit tak, aby odpovídalo konvencím spouštění shellu jiné distribuce UNIX provedením následující změny v předvolbách terminálu , zejména změňte nastavení, 172
k vydání 181
příkaz:
S tím vším jako pozadím nebo úvodem přejdu na mou nejlepší radu , za co to stojí.
Moje nejlepší rada:
Prohlédněte si soubory, které umístili správci vaší distribuce UNIX. Začněte s následujícími umístěními, pokud existují. Nezapomeňte použít 194
příkaz, protože některé soubory začínají tečkou. Podívejte se, jak se tyto soubory používají při spouštění, a zjistěte, jak s nimi interagují vaše vlastní spouštěcí soubory:
/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/bash.bashrc
/etc/bash_completion
Podívejte se do 204
manuál pro vyvolání a spouštěcí sekvenci. Vše je velmi dobře uspořádáno.
S tím vším jako upozornění – zde je návod, jak jsem udělal věci na své instalaci OSX 10.9.1 – Ostatní distribuce UNIX BUDOU odlišné, ale to, co je uvedeno níže, by mělo fungovat na většině distribucí UNIX, ne-li na všech, ale používat ty ostatní distribuce UNIX. konvence jako vodítko pro přizpůsobení níže uvedeného pro vaše vlastní účely:
.profil
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists. Note, however, that we will have a ~/.bash_profile and it
# will simply source this file as a matter of course.
# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.
# From here on out, I basically set up my PATH, LD_LIBRARY_PATH, and anything else I'd like
# global to running programs and how those programs find their libraries. This is shared by
# `cron`, so we really don't want interactive stuff, here. Also, I setup my environments
# for brew, macports, and fink here, essentially with setting PATH, and invocation of those
# package initialization file as in:
# Brew and locally compiled stuff:
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH
# The following line puts gnu utilities without the prefix "g" in the path
# i.e. tar/gtar:
export PATH=$PATH:/usr/local/Cellar/coreutils/8.21/libexec/gnubin
# MacPorts shoves stuff in /opt, so to get at that stuff...
export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH
# Set up for using Fink, which lives in /sw:
[ -e /sw/bin/init.sh ] && . /sw/bin/init.sh
# My stuff:
export PATH=~/perl:$PATH
export PATH=~/bin:$PATH
export PATH=.:$PATH
.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# From here on out, I put in things that are meaningful to interactive shells, like aliases,
# `shopt` invocations, HISTORY control, terminal characteristics, PROMPT, etc.
.bash_profile
# ~/.bash_profile: executed by the command interpreter for login shells.
# Because of this file's existence, neither ~/.bash_login nor ~/.profile
# will be sourced.
# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.
# Because ~/.profile isn't invoked if this files exists,
# we must source ~/.profile to get its settings:
if [ -r ~/.profile ]; then . ~/.profile; fi
# The following sources ~/.bashrc in the interactive login case,
# because .bashrc isn't sourced for interactive login shells:
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac
# I'm still trying to wrap my head about what to put here. A suggestion
# would be to put all the `bash` prompt coloring sequence functions as
# described on http://brettterpstra.com/2009/11/17/my-new-favorite-bash-prompt/
Takže to jsou moje dva centy. Mějte na paměti, že mé příklady se pokusily ukázat cestu ovládání přes spouštěcí soubory a vyhnout se tomu, co mohou ukládat konvence konkrétního webu.
proč dáváme vše na první místo do bash_profile?
.profile byl původně používán /bin/sh, použití .profile umožňuje zpětnou kompatibilitu.
Pokud nepoužíváte mac, není vše vloženo do bash_profile. Je vložen do bashrc
nedávalo by větší smysl a bylo by konzistentnější s linuxovou komunitou dát vše do bashrc a mít to zdrojový bash_profile?
Je běžné vkládat systémové informace do shellu, který se načte, když se připojíte k počítači (doba provozuschopnosti, balíčky vyžadující aktualizaci, teplota procesoru...). Pokud by bashrc získal bash_profile, viděli byste všechny tyto informace pokaždé, když otevřete nový shell.
V Unixu:
.bash_profile je načten přihlašovacími shelly
.bashrc je načten interaktivními shelly
Kromě Macu, který načte přihlašovací shell pro každý nový terminál (interaktivní nebo ne)
Další zdroje
rozdíl mezi bashrc a bash-profile
Kde jsou specifikovány proměnné prostředí
[...] Jsem zmatený, proč je preferování bash_profile standardem?
Kdo říká, že je to standard? Samotná příručka Bash má k tomuto tématu toto:
Takže obvykle váš ~/.bash_profile obsahuje řádek
if [ -f ~/.bashrc ]; pak . ~/.bashrc; fi
po (nebo před) inicializací specifickou pro přihlášení.