Les gens sources bash_profile de bashrc au lieu de l’inverse en raison de conventions locales .
Toutes les opinions que j'ai lues sur la configuration de leurs fichiers de démarrage sont bash
principalement basées sur la convention locale. La convention locale ne mentionne généralement pas la situation dans son ensemble en ce sens qu’elle ne parle pas beaucoup du cas non interactif et non connecté. La chose amusante est, et j’ai regardé, mais je vois rarement quelqu'un mentionner cron
dans ses discours pourquoi il faut placer des variables dans un fichier de démarrage plutôt que dans un autre. En fait, je n'ai entendu aucun commentaire dire: " / bin / sh est là pour une raison. Bash émule le shell Bourne original, / bin / sh, lorsqu'il est invoqué en tant que tel. " Tout d'abord, je m'éloigne un peu, ce cas est important pour les personnes qui travaillent avec le shell non seulement de manière interactive, mais qui fournissent des services non interactifs,arrière - plan ) des cron
scripts qui ont besoin d'un traitement shell minimal c. -à- traitement de fond ne nécessite pas les subtilités des invites de couleur, l' histoire et la substitution commande, une variable $ TERM correctement défini, etc.
En outre cron
, ce que je vois habituellement, ce sont les personnes qui créent des chemins de recherche minimaux ou des programmes appelants pleinement qualifiés, et qui ne savent pas comment traiter les sorties non connectées à un terminal (c’est-à-dire le non-interactif, le non-login bash
ou le sh
casier) lorsqu’ils travaillent avec leurs cron
scripts. Cela est généralement dû au manque de compréhension de la séquence de démarrage du shell, ce qui amène l'utilisateur à mettre en œuvre ses propres fichiers de démarrage de manière incohérente ou incohérente par rapport aux conventions déjà établies dans les /etc
fichiers de démarrage locaux .
En élaborant, la configuration effectuée par convention locale est présentée dans cette installation et les /etc
fichiers du shell . Si vous examinez les /etc
fichiers d'une installation UNIX qui sont appelés dans le cadre d'une bash
séquence de démarrage typique, vous devez alors créer leur propre démarrage d'une manière complémentaire à la convention établie dans ces /etc
fichiers de démarrage.
Le projet de documentation Linux indique:
/ etc / skel / Les fichiers par défaut de chaque nouvel utilisateur sont stockés dans ce répertoire. Chaque fois qu'un nouvel utilisateur est ajouté, ces fichiers squelettes sont copiés dans leur répertoire de base. Un système moyen aurait: fichiers .alias, .bash_profile, .bashrc et .cshrc. Les autres fichiers sont laissés à l'administrateur système.
Bien que le bash
manuel ne mentionne pas explicitement ces fichiers qui se trouvent couramment dans le /etc/skel
répertoire, SunOS, Solaris, RedHat, Ubuntu, HP-UX, umips et Ultrix contiennent des /etc/skel
fichiers sur lesquels modéliser les fichiers de démarrage du shell de l'utilisateur. OSX ne le fait clairement pas - j'utilise OSX 10.9.1 maintenant. Malheureusement, OSX ne vous donne pas grand chose à faire en termes de convention, mais comme OSX est un dérivé de BSD, j’ai simplement utilisé un autre dérivé de BSD, puis ma propre bash
séquence de démarrage, ajustant pour l’adapter aux conventions locales utilisées dans les /etc
fichiers de démarrage OSX 10.9.1 .
Un point important qui a été mentionné dans un commentaire parallèle est que pour OSX, la convention est de démarrer chaque nouveau terminal en tant que shell de connexion interactif. C'est bien la valeur par défaut sous OSX. Cette convention ne pose pas de problème tant que les utilisateurs d'une installation sont cohérents. Le comportement par défaut du terminal sous OSX peut être modifié pour se conformer aux conventions de démarrage du shell d'autres distributions UNIX , en modifiant les préférences suivantes du terminal , en particulier en modifiant le paramètre Shells open with:
permettant d'émettre la /usr/bin/login -f -l whmcclos bash -i
commande:
Avec tout cela en guise de contexte ou d’introduction, je vais donner suite à mon meilleur conseil , à savoir ce qu’il vaut.
Mon meilleur conseil:
Examinez les fichiers que les administrateurs de votre distribution UNIX ont mis en place. Commencez par les emplacements suivants, s'ils existent. N'oubliez pas d'utiliser la ls -a
commande, car certains fichiers commencent par un point. Voyez comment ces fichiers sont utilisés au démarrage et voyez comment vos propres fichiers de démarrage interagissent avec eux:
/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/bash.bashrc
/etc/bash_completion
Recherchez dans le bash
manuel la séquence d’appel et de démarrage. Tout est très bien aménagé.
Avec tout cela comme avertissement - voici comment j'ai fait les choses sur mon installation OSX 10.9.1 - Les autres distributions UNIX SERONT différentes, mais ce qui est présenté ci-dessous devrait fonctionner avec la plupart sinon la totalité des distributions UNIX, mais utilisez ces autres distributions UNIX convention comme guide pour adapter le ci-dessous à vos propres objectifs:
.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/
C'est donc mes deux centimes. Gardez à l'esprit que mes exemples ont essayé de montrer le chemin de contrôle à travers les fichiers de démarrage et d'éviter ce que les conventions d'un site particulier peuvent imposer.