GNU/Linux >> Znalost Linux >  >> Linux

Proč lidé získávají bash_profile z bashrc místo naopak?

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í.


Linux
  1. Proč nefunguje ~/.bash_profile?

  2. Grep – Proč závorky ve vzoru Grep odstraňují proces Grep z výsledků PS?

  3. Jak zastavit Kde přepisování ostatních nastavení Wm?

  1. Migrace linuxového serveru z příkazového řádku

  2. Zkoumání souborů Berkeley DB z CLI

  3. Nejrychlejší způsob, jak vložit blok textu do editoru vi z externího zdroje

  1. Zahrnout další soubory do .bashrc

  2. Vytvoření modulu jádra z několika zdrojových souborů, z nichž jeden má stejný název jako modul

  3. Příkaz 'ls -d' nezobrazuje adresáře. Existuje způsob, jak získat 'ls', aby zobrazoval pouze adresáře namísto souborů a adresářů?