W preferencjach terminalu sprawdź w okienku „Uruchamianie”. Masz opcje:
Muszle otwierają się za pomocą:
- Domyślna powłoka logowania (/ usr / bin / login)
- Command (pełna ścieżka)
Wybrałem opcję „domyślną” ... jeśli wybrano niestandardowe polecenie, może to być czynnik.
Następnym punktem do sprawdzenia jest to, czy powłoka jest uruchamiana jako powłoka logowania. Kiedy robię ps
wpis, widzę:
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
Kluczowym punktem jest tutaj „ -
” przed nazwą powłoki; który mówi powłoce, aby przeszła przez profil i powiązane rzeczy. Jeśli nie widzisz tego w swoich obecnych oknach, być może będziesz musiał omijać ustawienia, dopóki tego nie zrobisz.
Panel ustawień w preferencjach terminala zawiera także opcję powłoki. Mam / bin / sh na liście w moim.
Nie powinieneś tego potrzebować
Jeśli najgorsze dojdzie do najgorszego, możesz zrobić tak, jak to robiłem na niektórych innych niechętnych do współpracy systemach w przeszłości - stworzyłem program „loginsh”, który mogłem uruchomić z systemu Windows, a on z kolei wykonałby moją wybraną powłokę za pomocą „ -
” przedrostek informujący, że ma on działać jako powłoka logowania.
#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);
}
(Procedury "stderr.h"
nagłówka i „ err_*
” są pakietem raportowania błędów, którego używam wszędzie. jlss_basename()
Funkcja jest zasadniczo taka sama, jak wersje systemowa, taka jak w POSIX <libgen.h>
.)