.profile et .bashrc ne fonctionnent pas sur mon Mac
29
Ce problème que j'ai depuis longtemps. Après avoir exécuté le terminal .profile et le fichier .bashrc ne fonctionnent pas (ne sont pas exécutés). Pourriez-vous indiquer où devrais-je rechercher une source de problème?
vérifier si ces fichiers ont les autorisations appropriées
oui ... vous avez raison, la raison était vraiment stupide - autorisations incorrectes chmod + x ~ / .profile et tout fonctionne bien.
5
@xTrol: Cela n'a pas de sens, ~/.profilene nécessite pas de permission d'exécution. (Le shell le source, il ne l'exécute pas). Essayez de chmod -x ~/.profilevoir si cela fonctionne toujours.
Keith Thompson
Réponses:
40
J'ai eu un problème similaire avec mon .profilenon-exécution. Il se trouve (comme expliqué dans cette réponse d' Apple StackExchange ) que si vous avez .bash_profileou .bash_loginfichiers, votre .profileseront ignorées par bash.
/etc/profileet ~/.profileest lu pour un shell de connexion interactif, et
~/.bashrc est lu pour un shell interactif sans connexion.
Si votre autre machine UNIX lire automatiquement ~/.bashrcmême pour un shell interactif de connexion, c'est parce que le système à l' échelle /etc/
profilea une ligne qui se lit ~/.bashrc. OS X à l'échelle du système /etc/profilen'en a pas.
Donc, si vous souhaitez exécuter ~/.bashrcmême pour un shell de connexion interactif, vous devez inclure une ligne
Et pour compléter la pièce manquante ici: Un shell de terminal (sur lequel portait la question de l'OP) est par défaut un shell de connexion interactif.
LarsH
3
Essayez de les acheter "à la main":
source ~/.profile
et voyez ce qui se passe. Notez que, comme d'autres l'ont souligné, .profile provient de shells de connexion, .bashrc de shells sans connexion; essayez donc l'un ou l'autre, pas les deux.
Le point clé ici est le « -» devant le nom du shell; qui indique au shell de parcourir le profil et les éléments associés. Si vous ne voyez pas cela dans vos fenêtres actuelles, vous devrez peut-être régler les paramètres jusqu'à ce que vous le fassiez.
Le volet des paramètres dans les préférences du terminal répertorie également une option shell. J'ai / bin / sh répertorié dans le mien.
Vous ne devriez pas en avoir besoin
Si le pire arrive au pire, vous pouvez faire comme je l'ai fait sur d'autres systèmes non coopératifs dans le passé - j'ai créé un programme `` loginsh '' que je pouvais exécuter à partir de Windows, et à son tour, il exécuterait mon shell choisi avec le ' -' préfixe pour lui dire de fonctionner comme un shell de connexion.
#include <string.h>#include <stdlib.h>#include <unistd.h>#include "stderr.h"#include "jlss.h"#ifndef DEFAULT_SHELL#define DEFAULT_SHELL "/bin/sh"#endif /* DEFAULT_SHELL */#ifndef MAX_SHELLBASENAME#define MAX_SHELLBASENAME 256#endif /* MAX_SHELLBASENAME */#ifndef lint
static const char sccs[]="@(#)$Id: loginsh.c,v 4.2 2005/06/22 19:44:07 jleffler Exp $";#endif
int main(int argc, char **argv){
char *shell;
char shellname[MAX_SHELLBASENAME];
err_setarg0(argv[0]);/*Which shell to use?*/if((shell = getenv("SHELL"))==(char *)0)
shell = DEFAULT_SHELL;/*Set up argv[0]in new argument list; reuse old argv space */
shellname[0]='-';
strcpy(&shellname[1], jlss_basename(shell));
argv[0]= shellname;/*Execv must work -- the shell must be an executable program */
execv(shell,&argv[0]);
err_syserr("cannot execute shell %s\n", shell);/* NOTREACHED */return(EXIT_FAILURE);}
(L'en- "stderr.h"tête et les err_*routines ' ' sont un package de rapport d'erreurs que j'utilise partout. La jlss_basename()fonction est fondamentalement la même que les versions fournies par le système telles que celles trouvées dans POSIX <libgen.h>.)
Bonnes informations ci-dessus, mais j'ai pensé partager quelques détails sur le problème que j'ai rencontré et la solution que j'ai trouvée.
Le besoin: Ajoutez un répertoire à PATH sur OSX 10.8 (ML).
Le problème: le guidage est souvent "modifiez le .profile dans votre répertoire personnel". Un peu déroutant car, par défaut, ce fichier n'existe pas sur OSX. Doublement déroutant car une fois que vous ajoutez une instruction d'exportation pour ajouter le nouveau répertoire au CHEMIN existant ... cela ne fonctionne pas. Couvert ci-dessus.
La solution: j'ai ajouté l'instruction d'exportation à mon .bash_profile (également dans le répertoire personnel).
Je suis sûr qu'il existe de nombreuses façons d'écorcher ce chat. Celui-ci a fonctionné pour moi. Un peu inspirant confiance: le .bash_profile existait déjà et je pouvais voir que d'autres logiciels installés (par exemple Ruby) l'avaient modifié. S'il y a une meilleure solution, je serai heureux d'en entendre parler!
~/.profile
ne nécessite pas de permission d'exécution. (Le shell le source, il ne l'exécute pas). Essayez dechmod -x ~/.profile
voir si cela fonctionne toujours.Réponses:
J'ai eu un problème similaire avec mon
.profile
non-exécution. Il se trouve (comme expliqué dans cette réponse d' Apple StackExchange ) que si vous avez.bash_profile
ou.bash_login
fichiers, votre.profile
seront ignorées par bash.la source
.bash_login
a été ajouté après l'installationrvm
.Je suppose que ce Q&R devrait aller au superutilisateur, mais de toute façon:
Selon la section INVOCATION de la page de manuel ,
/etc/profile
et~/.profile
est lu pour un shell de connexion interactif, et~/.bashrc
est lu pour un shell interactif sans connexion.Si votre autre machine UNIX lire automatiquement
~/.bashrc
même pour un shell interactif de connexion, c'est parce que le système à l' échelle/etc/ profile
a une ligne qui se lit~/.bashrc
. OS X à l'échelle du système/etc/profile
n'en a pas.Donc, si vous souhaitez exécuter
~/.bashrc
même pour un shell de connexion interactif, vous devez inclure une lignedans votre
~/.profile
.la source
Essayez de les acheter "à la main":
et voyez ce qui se passe. Notez que, comme d'autres l'ont souligné, .profile provient de shells de connexion, .bashrc de shells sans connexion; essayez donc l'un ou l'autre, pas les deux.
la source
Dans vos préférences de terminal, vérifiez dans le volet «Démarrage». Vous avez des options:
J'ai choisi «par défaut» ... si vous avez choisi la commande personnalisée, cela peut être un facteur.
Le prochain point à vérifier est de savoir si le shell est démarré en tant que shell de connexion. Lorsque je fais une
ps
annonce, je vois:Le point clé ici est le «
-
» devant le nom du shell; qui indique au shell de parcourir le profil et les éléments associés. Si vous ne voyez pas cela dans vos fenêtres actuelles, vous devrez peut-être régler les paramètres jusqu'à ce que vous le fassiez.Le volet des paramètres dans les préférences du terminal répertorie également une option shell. J'ai / bin / sh répertorié dans le mien.
Vous ne devriez pas en avoir besoin
Si le pire arrive au pire, vous pouvez faire comme je l'ai fait sur d'autres systèmes non coopératifs dans le passé - j'ai créé un programme `` loginsh '' que je pouvais exécuter à partir de Windows, et à son tour, il exécuterait mon shell choisi avec le '
-
' préfixe pour lui dire de fonctionner comme un shell de connexion.(L'en-
"stderr.h"
tête et leserr_*
routines ' ' sont un package de rapport d'erreurs que j'utilise partout. Lajlss_basename()
fonction est fondamentalement la même que les versions fournies par le système telles que celles trouvées dans POSIX<libgen.h>
.)la source
Bonnes informations ci-dessus, mais j'ai pensé partager quelques détails sur le problème que j'ai rencontré et la solution que j'ai trouvée.
Le besoin: Ajoutez un répertoire à PATH sur OSX 10.8 (ML).
Le problème: le guidage est souvent "modifiez le .profile dans votre répertoire personnel". Un peu déroutant car, par défaut, ce fichier n'existe pas sur OSX. Doublement déroutant car une fois que vous ajoutez une instruction d'exportation pour ajouter le nouveau répertoire au CHEMIN existant ... cela ne fonctionne pas. Couvert ci-dessus.
La solution: j'ai ajouté l'instruction d'exportation à mon .bash_profile (également dans le répertoire personnel).
Je suis sûr qu'il existe de nombreuses façons d'écorcher ce chat. Celui-ci a fonctionné pour moi. Un peu inspirant confiance: le .bash_profile existait déjà et je pouvais voir que d'autres logiciels installés (par exemple Ruby) l'avaient modifié. S'il y a une meilleure solution, je serai heureux d'en entendre parler!
la source