Überprüfen Sie in den Terminaleinstellungen im Bereich "Start". Sie haben folgende Möglichkeiten:
Muscheln öffnen mit:
- Standardanmeldeshell (/ usr / bin / login)
- Befehl (vollständiger Pfad)
Ich habe 'default' gewählt ... wenn Sie den benutzerdefinierten Befehl gewählt haben, kann dies ein Faktor sein.
Der nächste zu überprüfende Punkt ist, ob die Shell als Anmeldeshell gestartet wird. Wenn ich eine ps
Auflistung mache , sehe ich:
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
Der Schlüsselpunkt hier ist das ' -
' vor dem Shell-Namen; Dadurch wird die Shell angewiesen, das Profil und verwandte Inhalte zu durchsuchen. Wenn Sie das in Ihren aktuellen Fenstern nicht sehen, müssen Sie möglicherweise die Einstellungen ändern, bis Sie dies tun.
Der Einstellungsbereich in den Terminaleinstellungen enthält auch eine Shell-Option. Ich habe / bin / sh in meinem aufgelistet.
Das solltest du nicht brauchen
Wenn das Schlimmste zum Schlimmsten wird, können Sie das tun, was ich in der Vergangenheit auf einigen anderen nicht kooperativen Systemen getan habe. Ich habe ein Programm "loginsh" erstellt, das ich unter Windows ausführen kann, und das wiederum meine ausgewählte Shell mit " -
" ausführen würde. Präfix, damit es als Anmeldeshell fungiert.
#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);
}
(Die "stderr.h"
Header- und ' err_*
' -Routinen sind ein Fehlerberichterstattungspaket, das ich überall verwende. Die jlss_basename()
Funktion ist im Grunde die gleiche wie die vom System bereitgestellten Versionen, wie sie in POSIX zu finden sind <libgen.h>
.)