Domanda

Ho usato diversi sistemi basati su * nix negli anni, e sembra che ogni tipo di Bash che uso abbia un algoritmo diverso per decidere quali script di avvio eseguire. Ai fini di attività come l'impostazione di variabili di ambiente e alias e la stampa di messaggi di avvio (ad esempio MOTD), quale script di avvio è il luogo appropriato per eseguire tali operazioni?

Qual è la differenza tra mettere le cose in .bashrc , .bash_profile e .environment ? Ho anche visto altri file come .login , .bash_login e .profile ; sono mai rilevanti? Quali sono le differenze in cui vengono eseguiti quando si accede fisicamente, si accede in remoto tramite ssh e si apre una nuova finestra del terminale? Ci sono differenze significative tra le piattaforme (incluso Mac OS X (e il suo Terminal.app) e Cygwin Bash)?

È stato utile?

Soluzione

La differenza principale con i file di configurazione della shell è che alcuni sono letti solo da " login " shell (ad es. quando si accede da un altro host o si accede alla console di testo di una macchina unix locale). questi sono quelli chiamati, diciamo, .login o .profile o .zlogin (a seconda della shell che stai usando).

Quindi hai i file di configurazione che sono letti da " interattivo " shell (come in, quelle connesse a un terminale (o pseudo-terminale nel caso, ad esempio, di un emulatore di terminale che gira sotto un sistema a finestre). Questi sono quelli con nomi come .bashrc , < codice> .tcshrc , .zshrc , ecc.

bash complica ciò in quanto .bashrc è letto solo da una shell che è sia interattivo che non login , così scoprirai che molte persone finiscono per dire al loro .bash_profile di leggere anche .bashrc con qualcosa come

[[-r ~ / .bashrc]] & amp; & amp; . ~ / .Bashrc

Altre shell si comportano in modo diverso, ad esempio con zsh , .zshrc viene sempre letto per una shell interattiva, sia che si tratti di un login o meno.

La pagina di manuale per bash spiega le circostanze in cui viene letto ogni file. Sì, il comportamento è generalmente coerente tra le macchine.

.profile è semplicemente il nome file dello script di accesso originariamente utilizzato da / bin / sh . bash , essendo generalmente retrocompatibile con / bin / sh , leggerà .profile se ne esiste uno.

Altri suggerimenti

È semplice. È spiegato in man bash :

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

Le shell di accesso sono quelle che vengono lette quando si accede (quindi, non vengono eseguite quando si avvia semplicemente xterm, ad esempio). Esistono altri modi per accedere. Ad esempio utilizzando un X display manager. Questi hanno altri modi per leggere ed esportare le variabili di ambiente al momento dell'accesso.

Leggi anche il capitolo INVOCATION nel manuale. Dice " I seguenti paragrafi descrivono come bash esegue i suoi file di avvio. & Quot; , penso che sia uno spot-on :) Spiega cosa è un " interattivo " anche la shell.

Bash non conosce .environment . Sospetto che sia un file della tua distribuzione, per impostare variabili d'ambiente indipendenti dalla shell che guidi.

Classicamente, ~ / .profile viene utilizzato da Bourne Shell ed è probabilmente supportato da Bash come misura legacy. Ancora una volta, C Shell ha usato ~ / .login e ~ / .cshrc - non sono sicuro che Bash li usi affatto.

Il ~ / .bash_profile verrebbe usato una volta, all'accesso. Lo script ~ / .bashrc viene letto ogni volta che viene avviata una shell. Questo è analogo a /.cshrc per C Shell.

Una conseguenza è che le cose in ~ / .bashrc dovrebbero essere il più leggere (minime) possibile per ridurre il sovraccarico all'avvio di una shell senza login.

Credo che il file ~ / .environment sia un file di compatibilità per Korn Shell.

Ho trovato informazioni su .bashrc e .bash_profile qui per riassumere:

  

.bash_profile viene eseguito quando   accesso. Le cose che ci metti potrebbero essere   il tuo PERCORSO e altri importanti   variabili di ambiente.

     

.bashrc è usato per shell non login.   Non sono sicuro di cosa significhi. lo so   quel RedHat   lo esegue ogni volta che si avvia   un'altra shell (su per questo utente o   semplicemente chiamando di nuovo bash) Potresti   voglio mettere alias lì ma di nuovo   Non sono sicuro di cosa significhi. io   semplicemente ignoralo io.

     

.profile è l'equivalente di   .bash_profile per il root. credo   il nome viene cambiato per lasciare altro   anche le shell (csh, sh, tcsh) lo usano.   (non ne hai bisogno come utente)

     

C'è anche .bash_logout che   viene eseguito alle, sì, buona ipotesi ... disconnettersi.   Potresti voler fermare i demoni o addirittura   fare un po 'di pulizie. Puoi   aggiungi anche "cancella" lì se vuoi   cancella lo schermo quando esci.

Inoltre c'è un follow-up completo su ciascuno dei file di configurazione qui

Probabilmente dipendono anche dalla distribuzione, non tutte le distro scelgono di avere ciascuna configurazione con sé e alcune ne hanno anche di più. Ma quando hanno lo stesso nome, di solito includono lo stesso contenuto.

Secondo Josh Staiger , Terminal.app di Mac OS X esegue una shell di accesso anziché una shell non di accesso per impostazione predefinita per ogni nuova finestra del terminale, chiamando .bash_profile anziché .bashrc.

Raccomanda:

  

La maggior parte delle volte non vuoi mantenere due file di configurazione separati   per shell di login e non login & # 8212; quando si imposta un PERCORSO, lo si desidera   applicare ad entrambi. Puoi risolvere questo problema acquistando .bashrc dal tuo   .bash_profile, quindi inserendo PATH e le impostazioni comuni in .bashrc.

     

Per fare ciò, aggiungi le seguenti righe a .bash_profile:

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi
     

Ora quando accedi al tuo   verrà chiamato un computer da una console .bashrc.

Un buon posto da vedere è la pagina man di bash. Qui è una versione online. Cerca " INVOCATION " sezione.

Ho usato le distribuzioni della famiglia Debian che sembrano eseguire .profile , ma non .bash_profile , mentre i derivati ??RHEL eseguono .bash_profile prima di .profile .

Sembra essere un casino quando devi impostare le variabili d'ambiente per funzionare su qualsiasi SO Linux.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top