2015-03-28 2 views
1

Я создал настраиваемую оболочку на C++. В настоящее время оболочка проектируется как бесконечный цикл while, который запускается путем запуска соответствующего исполняемого файла с терминала (я использую Ubuntu в качестве моей ОС). Оболочка реализует несколько новых команд, каждая из которых хранится в виде отдельных исполняемых файлов в файловой системе. Остальные команды, которые вводит пользователь, выполняются непосредственно с помощью функции обертки execve().Создание настраиваемой оболочки

Таким образом, я выполняю все пользовательские команды с помощью функции execve(): настраиваемые команды хранятся как отдельные exectuables и являются «exec ed», предоставляя путь к исполняемому файлу, тогда как любой другой «стандартный» Команда unix напрямую exec ed.

Вместо того, чтобы запустить его как отдельный исполняемый файл из bash, я хочу заставить пользователя использовать мою оболочку что выполняется на терминале. Как я могу это сделать?

я сослался на следующие ссылки:

Processes and Sessions and Controlling Terminals

Creating a UNIX shell

Однако, я не могу понять, чтобы из звеньев, как ассоциации между управляющим терминалом и оболочкой и т.д. Любая помощь быть оцененным в этом отношении.

UPDATE:

Это может показаться немного нелогичным, но:

Есть ли способ осуществить это в качестве команды пользователя, пользователь может выполнить из текущей оболочки Я знаю, что есть команда chsh ... но будет ли она работать с моей оболочкой?

+0

Вам нужен какой-то процесс, который развивает вашу оболочку. Неважно, какой процесс? Будь то bash, любая другая оболочка или какой-нибудь шаг загрузки? Просто зарегистрируйте свою оболочку в качестве оболочки входа в систему, возможно, именно это вы ищите. – arkascha

+0

Когда вы говорите «отдельный терминал», вы имеете в виду отдельный «gnome-terminal» или хотите, чтобы все терминалы были вашей оболочкой? – merlin2011

+0

@arkascha: Это звучит неплохо, но я на самом деле забыл упомянуть о чем-то, и поэтому сделал обновление ... Можете ли вы в этом разобраться? –

ответ

1

Сначала вы можете проверить свою оболочку от bash с помощью exec yourshell. Это заменяет процесс bash с вашей оболочкой целиком. (Когда вы выйдете из своей оболочки, терминал выйдет/выйдет с ней.)

Вы также можете запустить xterm -e yourshell, чтобы запустить xterm с вашей оболочкой вместо bash.

Если вы хотите, чтобы навсегда сделать его оболочки по умолчанию:

  1. Добавить свою оболочку в список системных оболочек, /etc/shells
  2. Изменить Логин Вашего пользователя оболочки с chsh
  3. Выйдите и снова
Смежные вопросы