У налаштуваннях вашого терміналу перевірте на панелі "Запуск". У вас є варіанти:
Раковини відкриваються:
- Оболонка входу за замовчуванням (/ usr / bin / login)
- Команда (повний шлях)
У мене вибрано "за замовчуванням" ... якщо у вас вибрана спеціальна команда, це може бути фактором.
Наступний момент, який слід перевірити, чи запущена оболонка як оболонка для входу. Коли я роблю ps
список, я бачу:
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
Ключовим моментом тут є ' -
' перед назвою оболонки; що повідомляє оболонці пробігатися через профіль та пов’язані з цим речі. Якщо ви не бачите цього у своїх поточних вікнах, можливо, вам доведеться скасувати налаштування, поки ви цього не зробите.
На панелі налаштувань у налаштуваннях терміналу також вказано параметр оболонки. У мене в списку є / bin / sh.
Вам цього не потрібно
Якщо найгірше приходить до гіршого, ви можете зробити так, як я робив у деяких інших системах, що не співпрацювали в минулі часи, - я створив програму "loginsh", яку я міг би запускати з Windows, і вона, в свою чергу, виконала обраний вами оболонку з " -
" префікс, щоб сказати, що він працює як оболонка для входу.
#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"
Заголовок і " err_*
" підпрограми - це пакет повідомлень про помилки, який я використовую скрізь. jlss_basename()
Функція в основному така ж, як і версії, що надаються системою, такі як в POSIX <libgen.h>
.)