Trong tùy chọn thiết bị đầu cuối của bạn, hãy kiểm tra trong ngăn 'Khởi động'. Bạn có các tùy chọn:
Vỏ mở với:
- Shell đăng nhập mặc định (/ usr / bin / đăng nhập)
- Lệnh (đường dẫn hoàn chỉnh)
Tôi đã chọn 'mặc định' ... nếu bạn có lệnh tùy chỉnh được chọn, đó có thể là một yếu tố.
Điểm tiếp theo để kiểm tra là liệu shell có được khởi động như một shell đăng nhập hay không. Khi tôi làm một ps
danh sách, tôi thấy:
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
Điểm mấu chốt ở đây là ' -
' phía trước tên shell; Nó báo cho shell chạy qua hồ sơ và những thứ liên quan. Nếu bạn không thấy điều đó trong các cửa sổ hiện tại của mình, bạn có thể cần phải xử lý các cài đặt cho đến khi bạn thực hiện.
Cửa sổ cài đặt trong tùy chọn thiết bị đầu cuối cũng liệt kê một tùy chọn shell. Tôi có / bin / sh được liệt kê trong tôi.
Bạn không cần điều này
Nếu điều tồi tệ nhất đến tồi tệ nhất, bạn có thể làm như tôi đã làm trên một số hệ thống không hợp tác khác trong thời gian qua - tôi đã tạo một chương trình 'loginsh' mà tôi có thể chạy từ các cửa sổ, và đến lượt nó sẽ thực thi lớp vỏ được chọn của tôi với ' -
' tiền tố để bảo nó hoạt động như một vỏ đăng nhập.
#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);
}
(Các thói quen của "stderr.h"
tiêu đề và ' err_*
' là gói báo cáo lỗi tôi sử dụng ở mọi nơi. jlss_basename()
Chức năng về cơ bản giống như các phiên bản do hệ thống cung cấp như được tìm thấy trong POSIX <libgen.h>
.)