Di preferensi terminal Anda, periksa di panel 'Startup'. Anda memiliki opsi:
Kerang terbuka dengan:
- Shell login default (/ usr / bin / login)
- Command (path lengkap)
Saya telah memilih 'standar' ... jika Anda memiliki perintah khusus yang dipilih, itu mungkin merupakan faktor.
Titik selanjutnya untuk memeriksa adalah apakah shell dimulai sebagai shell login. Ketika saya melakukan ps
daftar, saya melihat:
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
Poin kuncinya di sini adalah ' -
' di depan nama shell; yang memberitahu shell untuk menjalankan melalui profil dan hal-hal terkait. Jika Anda tidak melihat itu di windows Anda saat ini, Anda mungkin perlu menipu dengan pengaturan sampai Anda melakukannya.
Panel pengaturan di preferensi terminal juga mencantumkan opsi shell. Saya memiliki / bin / sh terdaftar di tambang.
Anda seharusnya tidak membutuhkan ini
Jika yang terburuk menjadi yang terburuk, Anda dapat melakukan seperti yang saya lakukan pada beberapa sistem tidak kooperatif di masa lalu - saya membuat program 'loginsh' yang dapat saya jalankan dari windows, dan pada gilirannya akan menjalankan shell yang saya pilih dengan ' -
' awalan untuk memerintahkannya berfungsi sebagai shell 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);
}
( "stderr.h"
Header dan ' err_*
' rutin adalah paket pelaporan kesalahan yang saya gunakan di mana-mana. jlss_basename()
Fungsinya pada dasarnya sama dengan versi yang disediakan sistem seperti ditemukan di POSIX <libgen.h>
.)