Nelle preferenze del tuo terminale, seleziona nel riquadro "Avvio". Hai opzioni:
Le conchiglie si aprono con:
- Shell di accesso predefinita (/ usr / bin / login)
- Comando (percorso completo)
Ho scelto 'default' ... se hai scelto il comando personalizzato, questo potrebbe essere un fattore.
Il prossimo punto da verificare è se la shell viene avviata come shell di login. Quando faccio un ps
annuncio, vedo:
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
Il punto chiave qui è il ' -
' davanti al nome della shell; che dice alla shell di scorrere il profilo e le cose correlate. Se non lo vedi nelle finestre correnti, potresti dover giocare con le impostazioni fino a quando non lo fai.
Il riquadro delle impostazioni nelle preferenze del terminale elenca anche un'opzione shell. Ho / bin / sh elencato nel mio.
Non dovresti averne bisogno
Se il peggio arriva al peggio, puoi fare come ho fatto su altri sistemi non collaborativi in passato: ho creato un programma 'loginsh' che avrei potuto eseguire da Windows, e a sua volta avrebbe eseguito la shell prescelta con ' -
' prefisso per dire che funziona come una shell di login.
#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' "stderr.h"
intestazione e le err_*
routine " " sono un pacchetto di segnalazione errori che uso ovunque. La jlss_basename()
funzione è sostanzialmente la stessa delle versioni fornite dal sistema come quelle che si trovano in POSIX <libgen.h>
.)