Dans vos préférences de terminal, vérifiez dans le volet «Démarrage». Vous avez des options:
Les coquilles s'ouvrent avec:
- Shell de connexion par défaut (/ usr / bin / login)
- Commande (chemin complet)
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:
PID TTY TIME CMD
24088 ttys000 0:00.03 -sh
24614 ttys001 0:00.03 -sh
25127 ttys002 0:00.05 -sh
35544 ttys003 0:00.08 -sh
40926 ttys004 0:00.03 -sh
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>
.)